Tag Archives: sphinx

Sphinx 的那些麻烦事

Sphinx 搭了一个全文检索。虽说 Sphinx 本身已经实现了很多功能,简单应用基本只需要配置就行用,不需要做很多开发。但我做的玩意不简单,所以还是碰到了不少麻烦事。

一个是分布式索引更新问题。文档里说是分布式索引也支持更新。但我搭了一个两层的索引,第一层是 remote 的,第二层是 local 的,结果就返回0(失败)。后来咨询了一下,再试验了一下,发现单层的分布索引没问题,两层 remote 或者两层 local 也没问题,就是混用不行…… 不清楚这么设计的意图是啥。

Sphinx 出于搜索性能考虑,并没有直接实现增量索引功能,需要自己实现。一般是先为增量部分单独建一个小索引,然后合并回原来的索引。虽然会引起两倍于原索引的IO,但速度还挺快。

配置文件不灵活也是个缺点。Sphinx 的配置文件不支持 include 。每个不同的 searchd 实例需要加载不同的配置文件。如果不同的配置文件里有不少重复的部分,每个 copy 一份维护就麻烦。只好用模版程序生成了。我用的 coreseek 的版本。其中加入了一个 python 数据源。我用它包装了一个 json pipe 数据源。然后需要配置一个命令行命令。然后发现,所有能用的配置项都写死在了程序里。只有这些配置项能用。想增加新的配置项只有去改源代码。为了避免以后维护补丁的麻烦,就只好复用原来的 xmlpipe_command 了。好歹是个 command……

Sphinx 还是不够成熟,但对于小型网站来说足够简单易用,功能很丰富,性能也很好,并且有许多语言的绑定。但是在可扩展性和二次开发上还是不够。