PHP高性能全文检索开源解决方案:Xunsearch
Xunsearch 是一个高性能、全功能的全文检索解决方案。
Xunsearch 旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。
Xunsearch 中文译名为“ 迅搜”,代码中的经常被缩写为 XS,既是英文名称的缩略也是中文声母缩写。这儿的“迅”是快速的意思,至少包含了两层涵义:其一代表了搜索结果的响应能力,其二则为二次开发难度、速度。
Xunsearch 采用结构化分层设计,包含后端服务、前端开发包两大部分,层次清晰而不交叉。其中后端是采用 C/C++ 编写的守护进程,而前端采用最为流行的脚本语言 PHP ,对于 web 搜索项目更为方便。具体参见 架构设计。
Xunsearch 极大程度降低的搜索开发的难度,除了常规的中文分词、字段检索、布尔语法等功能外,还比其它免费的解决方案提供了用户急需的相关搜索、拼音搜索、结果高亮、搜索建议等等。具体的清单请参见我们的 功能列表。
Xunsearch 真正全面开源,并使用最流行的开源许可协议 GPL 发布。您可以免费获取本项目的全部源代码,自由的使用它,并在许可条件下修改和再分发,具体参见 授权声明文件。
1. 应用领域
前提是要有一定的 PHP (或其它对应的 SDK 语言) 开发能力,并备有 Unix 类型操作系统的服务器至少一台。
Xunsearch 可以帮助您建立各种行业门户/垂直搜索、BBS 论坛搜索、CMS/Web站内搜索、文档/文献资料检索,以及各种基于现有数据库系统的全文检索。
2. 历史渊源
大约在 2006 年创始人 hightman 开始了全文检索的相关探索,先是发布了纯 PHP 实现的中文分词代码,之后又推出了 MySQL/MyISAM 全文索引的中文分词补丁 MyFT。经过一系列不断完善和改进后,于 2007 年正式发布中文分词项目 scws 并一直维护至今。
起初开发分词的目的就是为了解决中文的全文检索,全文检索技术虽然已经趋于成熟,但多为商业产品。免费开源、并且要好用的还真难找了,于是萌动了自己开发全文检索的念头。2008 年推出了比较粗糙的搜索解决方案 FTPHP,之后于 2010 年又开启了 Xungle 项目,直接免去各种技术需求,为用户提供包含软硬环境在内的搜索服务。
在 Xungle
项目的运作过程中,我们发现还有大量的用户出于各种原因,不得不自行解决搜索技术。此外,我们发现了国外一个优秀的开源搜索引擎基础库
Xapian,它采用 C/C++
开发,并且性能卓越,久经考验。但是并没有整合中文分词,并且开发难度、复杂度也较大。于是我们下决心整合 Xapian 和
Scws,并在此基础上提供更多、更常用的搜索功能。这就是 Xunsearch
,目前版本发布正在准备中,代码也已托管到 github 中。
3. 开发团队
本项目由杭州云圣网络科技公司创立并维护,同时也是唯一就 Xunsearch 提供相应的商业技术服务、支持的公司。
4. 致谢
是大量 xungle 用户的提议促使我们开启 xunsearch 项目,Xunsearch 的往后发展将离不开广大用户的支持,还要特别感谢在此其间义务参与 xunsearch 内测的一些朋友。
Xunsearch 底层采用 C/C++ 编写,其中用到了许多其它优秀项目,在线特别感谢它们的团队和作者。主要有以下几个:
- xapian-core 这是 Xunsearch 的底层索引设计方案
- scws 默认内置的中文分词解决方案
- libevent 后端服务器的事件处理模型
- nginx 搜索服务器的设计借鉴了 nginx 的方式,采用多进程、多线程混合用于处理高并发请求
- Yii 非常优秀的 PHP 开发框架,xunsearch 官网采用该框架,文档组织形式也参考自 Yii
Xunsearch 架构简图
Xunsearch 分为后端服务和前端开发包两大部分,这两个部分允许部署在不同服务器中。
后端是采用 C/C++ 开发的守护进程,包括索引服务器(xs-indexd)、搜索服务器(xs-searchd)。索引服务器用于集中处理索引变动,并自动调用工具程序优化和更新数据库;搜索服务器借鉴了 nginx 的作法,使用进程、线程混合工作模式处理高并发的搜索请求。
通常在二次开发时并不需要去关心后端的实现,只要在我们提供的前端开发包基础上开发即可。
前端开发包通常使用脚本语言编写,负责协商前端调用与后端服务通讯,我们称之为 SDK 开发包。理论上支持各种包含 socket 通讯实现的脚本语言,但目前我们只提供了 PHP 语言,以后再陆续考虑和开发其它语言。非常欢迎有能力有意愿的朋友提供、贡献其它语种的代码。
下面是我们用字符直接制作的一张架构简图。
官网地址: http://www.xunsearch.com/
青春就应该这样绽放 游戏测试:三国时期谁是你最好的兄弟!! 你不得不信的星座秘密