如何搭一个搜索引擎:[2]sphinx篇
上一篇介绍了用xapian搭搜索引擎,这篇介绍使用sphinx来搭中文搜索引擎(实际使用了中文coreseek来搭)。Coreseek 是一个可供企业使用的、基于Sphinx(可独立于Sphinx原始版本运行)的中文全文检索引擎(主要就是加了中文分词功能和支持了python数据源)。
Sphinx 是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎,使用c++语言编写。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx提供了:索引、检索、排序等搜索引擎的主要功能,关键sphinx支持mysql数据源,方便基于LAMP架构的网站创建自己的搜索引擎服务。sphinx功能强大,提供c、php等api接口,从易用性上来说比xapian要有优势。
由于coreseek在sphinx基础上加入了对中文分词的支持,本篇主要介绍使用coreseek来搭建一个中文搜索引擎服务。
操作方法
- 01
准备工作: 下载coreseek源码:http://www.coreseek.cn/ ,按照网上的教程编译、安装好。 coreseek中文文档:http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html
- 02
修改配置文件: (各配置项详细说明请认真阅读coreseek中文文档) 1)指定数据源: 一般使用mysql数据库作为源 2)配置索引: mlock:为1的情况下使得内存中的索引数据不会被系统换出,某些情况下可以提高性能。 min_prefix_len:前缀索引最小长度,如:等于3的情况下,facebook会生成fac face faceb facebo faceboo facebook六个term对于的索引项。 sphinx支持增量索引,方便新增加的数据快速被检索到,而不用重建整个索引,增量部分可以频繁更新,而不需要重建整个索引。索引的实时增、删、改操作都有相应的解决方案。增:可通过增量索引、或rt索引实现(目前只能使用sphinxQL来更新索引);删:通过设置索引属性标志位的方法来实现;改:通过 UpdateAttributes来更新索引属性。注意:索引字段的更新只能通过重建索引。 3)配置检索服务searchd,几个参数说明: seamless_rotate:支持动态更换索引,即不影响线上检索服务的情况下更换索引,动态换索引的大致原理是采用双buffer机制,用两倍的内存保证在更换索引时又能同时提供服务。
- 03
创建索引并启动服务: ./indexer -c etc/test.conf --all --rotate ./searchd -c etc/test.conf 只要设置了seamless_rotate=1,下次可以直接使用./indexer -c etc/test.conf --all --rotate来更换索引而不用重启searchd服务了。
- 04
客户端api使用: sphinx提供了sphinxapi.php的api程序,并提供了test.php运行脚本,php程序员修改一下即可方便使用。
- 05
总结: sphinx提供了单索引千万级的搜索引擎解决方案,提供了丰富实用的索引、检索、排序、过滤等功能,100w级数据,索引文本大小不到1个G,检索响应时间在10ms以内。对于千万级以下规模、日搜索量在100w以内的强烈推荐使用,避免重复造车轮,吃力不讨好。即使将来数据量、检索量、功能需求进一步增长,也可以很方便地通过sphinx提供的引擎来作扩展。