狮身人面像删除了文件

时间:2009-12-17 12:59:24

标签: sphinx

我有这个问题很长时间了,找不到解决方法。 我想这可能是每个人都面对使用Sphinx的事情,但我知道了 有用的信息。

我有一个索引和一个delta。 我在php模块中查询了两个索引,然后显示结果。 对于结果中的每个ID,我为模型创建一个对象,并为其创建dsiplay主数据 那个模特。

我从数据库中删除了一个文档,这是一种虚假的方式。

当我查询索引时,此已删除文档的ID仍然存在(在sphinx中 结果集)。 也许我可以通过代码检测到这一点,并避免显示它,但结果集sphinx给了我 结果是错误的。 xxx total_found,当真的是xxx-1时。 例如,Sphinx给了我前20个结果,但是这20个结果中没有一个没有 已经存在了,所以我只需要显示19个结果。

我每天重新索引主索引一次,并且每5分钟重新索引delta索引。

这有解决方案吗?

提前致谢!!

3 个答案:

答案 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