我有一个网站利用sphinx的主/ delta索引方案。主要每天重建,delta每5分钟重建一次。这适用于索引新提交的项目。
问题是,需要从索引中删除项目的频率与添加项目一样频繁,并且通常删除的项目较旧,因此它们已经驻留在主索引中。因此,在删除项目后,它们仍会在搜索结果中显示长达24小时(直到主要重建时间凌晨1点)。
我该如何解决这个问题?
答案 0 :(得分:2)
请参阅sql_query_killlist http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist
的文档简而言之,你需要在delta指数中跟随:
sql_query_killlist = select id from mytable where updated > @last_delta_update
答案 1 :(得分:0)
Sphinx最近推出了一个实时索引功能,您可以在其中动态添加,更新和删除索引。但是,它仅在1.10中可用,并且看起来仍然非常原始。
http://www.sphinxsearch.com/docs/current.html#rt-indexes
或者,您可以更频繁地完全重新索引。如果你有很多删除,那么每24小时似乎有点长。作为最后的努力,您可以随时在应用程序中检查返回的ID确实仍然存在,然后将其过滤掉。
答案 2 :(得分:0)
一种选择是在索引中定义属性,然后将其值更改为“忽略”某些文档。 例如,我的索引具有flag_ignore属性。过滤所有搜索,以便只匹配flag_ignore = 0的那些文档。 当文档需要从索引立即消失时,我调用Sphinx-> UpdateAttributes()并将值设置为1,这将使文档从以下任何搜索中消失。