在sphinx中,如果索引在两次setlimit调用之间更新,搜索结果如何显示?


In sphinx how does the search result display if the index updates inbetween two setlimit calls

我刚刚开始使用php开发sphinx。我只是想知道如果我设置限制为每次通话20条记录。

$cl->SetLimits ( 0, 20);

用——rotate选项设置索引重建时间为5分钟。

所以如果在我的应用程序中我需要调用下20个搜索结果,我调用命令

$cl->SetLimits ( 20, 20); 

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

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

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

谢谢!

编辑(注意:下一个setlimit命令是基于用户事件调用的,比如'See more Results')

是的,这是可能发生的。

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

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

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

(这至少可以处理索引的新添加,但处理文档的更改比较困难,但可以用类似的方式完成)

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

所以回答您的问题,不,它将查询与max_matches并保存结果集,从那里您使用结果集而不是索引数据。

有一个问题,为什么你每5分钟索引一次?每次数据发生变化时,最好重新索引。