首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shpinx的安装与使用测试

Sphinx 在2018年的搜索引擎中排名第五,但它仍然是一种强大且流行的技术,在排名方面让位于Elasticsearch和Solr。 Sphinx用于如此着名的系统中 Joomla.org, CouchSurfing.org, Wikimapia.org, Tumblr.com, 优酷土豆 以及数百种其他应用。

Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒) 高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果) 高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录) 支持分布式检索 支持基于短语和基于统计的复合结果排序机制 支持任意数量的文件字段(数值属性或全文检索属性) 支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”) 支持作为Mysql的存储引擎

安装

从官网http://sphinxsearch.com下载最新版本。windows版本是一个压缩包,本地解压可以直接使用。 目录结构如下:

配置

主索引配置。对于中文,source中需要指定sql连接字符集,避免拿到的数据是乱码。在生成主索引的同时,我们还需要更新所以最后创建时间,因此需要一些额外操作。可以使用sql_query_post执行指定的sql语句,将数据保存到数据库中。

source 一些配置说明:

index 配置说明:

使用

先来看如何把sphinx集成到业务当中。sphinx可以设置多个索引。虽然sphinx生成索引很快,但是对于大量数据,每次数据变更多重新建索引,还是会有很大的额外开销。目前主要的解决方案是通过更新增量索引实现sphinx数据实时更新。索引sphinx中其实有两个索引数据,一个全量索引,一个增量索引。如果数据是后面新增的,会在增量索引中找到。如果数据修改,或删除,则配合sql_query_killlist可以屏蔽旧的索引数据,从而保证对修改的数据以增量索引为主。以下是sphinx使用的一个说明图:

实验

普通搜索

mysql中建立三个表,config用于保存sphinx状态数据,changes保存变更记录数据,posts是源数据。post中插入一条数据:

在命令行中生成全量索引

然后启动搜索服务:

执行php脚本,搜索"新华"两个字,可以发现数据可以被找出来。

新增数据后搜索

执行下面sql语句模拟数据新增操作:

在命令行中更新增量索引

执行php脚本,输出内容:,可以找到新增内容

修改旧数据

执行下面sql语句模拟数据更新操作

这个时候我们把原先 summary "百度新华网"的数据修改成"百度腾讯网",这个时候在搜索"新华"应该无法搜索到该内容

执行php脚本,搜索"新华",输出,搜索"腾讯"内容可以搜索到内容

删除旧数据

重新创建一次全量索引,使得全量索引有两条数据,然后模拟删除一条数据之后搜索。这个时候id=1的数据summary内容为"百度腾讯网"。

执行下面sql语句模拟数据删除操作

执行php脚本,搜索"腾讯",输出

其他

必须设置sql_query_killlist,和kbatch,sql_query_killlist配置在detal source中,kbatch配置在detal index中。

搜索顺序,必须是'main','detal',这样才会保证索引以detal为主。

如果没有配置sql_query_killlist的时候,对于已经修改的数据,sphinx返回的查询还是旧的数据。例如前面,初始数据为"百度新华网",修改为"百度腾讯网"之后,搜索新华还是能搜索出来,搜索腾讯确搜索不出来。

sql_query_killlist 只是生成了一个屏蔽表,保证在这个屏蔽表的数据,只会从后面(这里是detal索引)索引查找,并没有删除索引数据,因此查询的顺序也很重要。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G199MP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券