我有这个问题很长时间了,找不到解决方法。 我想这可能是每个人都面对使用Sphinx的事情,但我知道了 有用的信息。
我有一个索引和一个delta。 我在php模块中查询了两个索引,然后显示结果。 对于结果中的每个ID,我为模型创建一个对象,并为其创建dsiplay主数据 那个模特。
我从数据库中删除了一个文档,这是一种虚假的方式。
当我查询索引时,此已删除文档的ID仍然存在(在sphinx中 结果集)。 也许我可以通过代码检测到这一点,并避免显示它,但结果集sphinx给了我 结果是错误的。 xxx total_found,当真的是xxx-1时。 例如,Sphinx给了我前20个结果,但是这20个结果中没有一个没有 已经存在了,所以我只需要显示19个结果。
我每天重新索引主索引一次,并且每5分钟重新索引delta索引。
这有解决方案吗?
提前致谢!!
答案 0 :(得分:1)
也许这更适合我的需求,但涉及更改数据库。
http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist
答案 1 :(得分:1)
我在Ruby Sphinx适配器Thinking Sphinx中所做的是跟踪记录何时被删除,并更新主索引中记录的布尔属性(我称之为sphinx_deleted
)。然后,每当我搜索时,我都会过滤sphinx_deleted
为0的值。在sql_query配置中,我有如下显式属性:
SELECT fields, more_fields, 0 as sphinx_deleted FROM table
当然还有属性定义。
sql_attr_bool = sphinx_deleted
请记住,对属性的这些更新(使用Sphinx API)只存储在内存中 - 底层索引文件不会更改,因此如果重新启动Sphinx,您将失去这些知识,除非您执行完整操作索引也是如此。
这是一项工作,但它将确保您的结果计数和分页整齐有效。
答案 2 :(得分:0)
我想您可以从sphinx中获取25个结果,然后当您从数据库中获取完整数据时,查询中只有limit 20
。