0

我刚刚开始使用 php 研究 sphinx。只是想知道我是否将每次通话的记录限制为 20 条。

$cl->SetLimits ( 0, 20);

使用 --rotate 选项将索引重新创建设置为 5 分钟。

因此,如果在我的应用程序中我必须调用接下来的 20 个搜索结果,我会调用命令

$cl->SetLimits ( 20, 20); 

假设在两次 setlimit 调用之间重新创建了索引。并说插入了一个具有最高权重的新文档。(我正在按相关性对结果进行排序。)

搜索结果会不会向下移动一个位置,所以之前的第 20 条记录现在将成为第 21 条记录,所以我再次在第 21 位获得与我在第 20 位获得的结果相同的结果,因此我的应用程序将显示重复的搜索结果。这是真的吗?其他任何人都有这个问题。

或者我应该如何克服这个?

谢谢!

编辑(注意:下一个 setlimit 命令是根据用户事件调用“查看更多结果”)

4

2 回答 2

0

setLimit 在结果服务器端设置偏移量,http ://php.net/manual/en/sphinxclient.setlimits.php 。

因此,要回答您的问题,不,它将使用 max_matches 查询并保存结果集,然后您将使用结果集而不是索引数据。

但是有一个问题,你为什么每 5 分钟索引一次?每次数据更改时重新索引会更好。

于 2013-05-14T11:06:10.830 回答
0

是的,这可能发生。

但通常很少发生,以至于没有人注意到。

避免这种情况的唯一方法是在查询中存储某种索引。因此,除了页码之外,您还包括最后一个 ID。然后在第二页等时,使用该 ID 排除自搜索开始以来创建的任何新结果。

在第一页查询中,您在索引中查找最大的 id,需要为此运行第二个查询。

(这至少应对索引的新增内容,但更难应对文档的更改,但可以以类似的方式完成)

于 2013-05-14T11:32:49.610 回答