搜索:在指定的索引中搜索
../bin/search -i items -c eboss.conf school // -i指定在哪个索引中查询
过滤:
合并两个已有的索引比重新对所有数据做索引更有效率,而且有时候必须这样做(例如在“
主索引+增量索引”分区模式中应合并主索引和增量索引,而不是简单地重新索引“主索引
对应的数据)。因此indexer有这个选项。合并索引一般比重新索引快,但在大型索引上仍
然不是一蹴而就。基本上,待合并的两个索引都会被读入内存一次,而合并后的内容需要写
入磁盘一次。例如,合并100GB和1GB的两个索引将导致202GB的IO操作(但很可能还
是比重新索引少)
基本的命令语法如下:
indexer --merge DSTINDEX SRCINDEX [--rotate]
SRCINDEX的内容被合并到DSTINDEX中,因此只有DSTINDEX索引会被改变。若
DSTINDEX已经被searchd用于提供服务,则--rotate参数是必须的。最初设计的使用模式是,
将小量的更新从SRCINDEX合并到DSTINDEX中。因此,当属性被合并时,一旦出现了重
复的文档ID,SRCINDEX中的属性值更优先(会覆盖DSTINDEX中的值)。不过要注意,
“旧的”关键字并不会被自动删除。例如,在DSTINDEX中有一个叫做“old”的关键字与文
档123相关联,而在SRCINDEX中则有关键字“new”与同一个文档相关,那么在合并后用
这两个关键字都能找到文档123。您可以给出一个显式条件来将文档从DSTINDEX中移除,
以便应对这种情况,相关的开关是--merge-dst-range:
indexer --merge main delta --merge-dst-range deleted 0 0
这个开关允许您在合并过程中对目标索引实施过滤。过滤器可以有多个,只有满足全部过滤
条件的文档才会在最终合并后的索引中出现。在上述例子中,过滤器只允许“deleted”为0
的那些条件通过,而去除所有标记为已删除(“deleted”)的记录(可以通过调用
UpdateAttributes() 设置文档的属性)。
去旧(强行更新):
情景描述:假设有一旧关键字“去钓鱼”,与论坛贴子“周末的活动”相关联,用“去钓鱼”可以搜索到这篇帖子。之后楼主把贴子关键字部分改成了“去河边钓鱼”。如果用sphinx的indexer生成增量索引bbsattend,然后用indexer --merge bbs bbsattend --rotate合成到主索引bbs后。用“去河边钓鱼”搜不到结果,用“去钓鱼”可以搜到“去河边钓鱼”的结果。
解决办法:加--merge-killists option(选项)
indexer --merge bbs bbsattend --rotate --merge-killists
../bin/indexer -c eboss.conf --merge-killlists --merge items items_delta --merge-dst-range deleted 0 0 //个人在ubuntu的实际操作