1

我这个问题困扰了很久,也没有找到解决办法。我想这可能是每个人在使用 Sphinx 时都会遇到的问题,但我无法获得任何有用的信息。

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

我从数据库中删除了一个文档,物理上。

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

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

这个有解决办法吗??

提前致谢!!

4

3 回答 3

1

也许这更适合我的需求,但涉及更改数据库。

http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist

于 2009-12-17T15:29:55.850 回答
1

我在我的 Ruby Sphinx 适配器 Thinking Sphinx 中所做的是跟踪记录何时被删除,并更新主索引中记录的布尔属性(我称之为sphinx_deleted)。然后,每当我搜索时,我都会过滤值为sphinx_deleted0 的值。在 sql_query 配置中,我具有如下的显式属性:

SELECT fields, more_fields, 0 as sphinx_deleted FROM table

当然还有属性定义。

sql_attr_bool = sphinx_deleted

请记住,这些属性更新(使用 Sphinx API)仅存储在内存中 - 底层索引文件不会更改,因此如果您重新启动 Sphinx,您将失去这些知识,除非您也执行完整索引.

这有点工作,但它会确保您的结果计数和分页能够整齐地工作。

于 2009-12-19T07:55:32.223 回答
0

我想您可能会从 sphinx 请求 25 个结果,然后当您从数据库中获取完整数据时,只需limit 20在查询中添加一个。

于 2009-12-17T13:11:38.997 回答