Sphinx全文搜索入门和配置注意事项

把文档看了一遍,然后动手测试了搞了两天才绕明白 SphinxSearch 的基本用法 ~

应用场景

之前搜索都是 PHP + MySQL原生态搜索 select like %% 模式,如果遇到数据量较大,就会出现非常慢,甚至每次执行都MySQL等待。如果数据有1000万条,需要全文搜索,效率低下缓慢。一个解决办法Sphinx

踩过的坑

  1. 总是安装失败

从官网下载Sphinx,安装,启动第一步都错误,不断报错各种。后来捣鼓了很久,才发现版本问题。官网默认下载的Sphinx3.x,但是文档却是2.x,默认配置也是2.x的,完全都没有更新,感觉Sphinx官方的人员都懒得更新这个项目了。改为下载Sphinx2.x,对着文档完全没有错误。

  1. 如何保证实时同步,包括同步删除

实时是两个,比如MySQL中有记录被删除,那么Sphinx索引中也需要进行删除,MySQL有新增或更高,Sphinx索引中必须进行更新更改。这里我的方案是在MYSQL中新起一个表 sphinx (id int primary,type int default 1 comment '1新增或更新 0表示记录删除 默认1') ,当文档中有记录比如id=1进行了更新或新增,那么写入一条记录id=1,type=1。如果文档中有记录id=xx被删除或不对外索引,写入一条记录id=xxx,type=0。
然后执行创建增量索引 indexer delta --rotate,创建之后再将增量索引delta 合入到 main 全量索引中,使用的命令 indexer --merge main delta --merge-klists --rotate,这里要注意的是--merge-klists 这个参数,表示被删除的索引将从全量索引中进行踢出。当然,如果你数据比较少,你可以不创建 delta 增量索引,每次都只是进行 indexer main --rotate 即可。

配置注意

在有增量索引的情况下,有两个注意的地方,就是数据源source main需要加入一条配置sql_query_post_index = delete from sphinx 表示全量索引每次重建的时候,将Mysql 表sphinx 的记录全部清空。而在增量索引delta 的数据源中需要加入如下配置

source delta : src1 {
	sql_query		= \
		SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
		FROM documents WHERE id IN ( SELECT id FROM sphinx WHERE type=1 )
	sql_query_killlist = SELECT id FROM sphinx where type=0
}

第一个sql_query 表示增量索引中只记录表sphinx中标记的记录,包括删除的记录。第二段sql_query_killlist 表示需要从索引中删除的记录。

PHP结合注意

网上很多都是使用自带的SphinxApi.php,但这个是不推荐的方法,PHP链接Sphinx应该使用SphinxQL。SphinxAPI是一种过时将被弃用的方法。PHP 使用 SphinxQL 连接Sphinx的官方例子:
http://sphinxsearch.com/blog/2014/10/20/sphinxql-query-builder-for-php/

composer 库的SphinxQL-Query-Builder
https://github.com/FoolCode/SphinxQL-Query-Builder

测试流程

1.配置sphinx.conf
2.启动searchd,再执行一次 indexer --all
3.增加数据,执行进行索引全量索引 main indexer -c sphinx.conf main --rotate 。或者第二种方案,增加了数据,先执行增量索引indexer -c sphinx.conf delta --rotate,再执行索引合并,将增量索引合并到全量索引中 indexer -c sphinx.conf --merge main delta --merge-klists --rotate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值