在最近的项目中一直在使用sphinx全文检索,但是发现sphinx在建立索引后,如果没有重建索引,对Mysql里的数据进行修改或删除操作,都无法实时反应到sphinx索引中,导致查询不准确,但是如果在大数据量的情况下重建索引是一件很郁闷的事情:一、耗时间 二、服务器cpu狂飙。因此我们找到了http://blog.s135.com/sphinx_search/这种解决方案,但是太可惜了,这家伙竟然没开源,没办法弄,于是我们得重新设计sphinx来实现这个功能:
1、在所有在sphinx中配置的相关索引写入数组
2、在数据层如果进行更新或删除操作,如果涉及到相关索引的时候,将这部份操作通过sphinxclient的API中的updateAttribute()函数写入增量索引
3、查询的时候同时访问主索引和增量索引,如果发现有相同的doc时,则优先采用增量索引
4、在凌晨时,进行索引合并。