我的反向索引如下:
标记字docid,位置;docid,位置;docid,位置;
在算法中,为了在查询短语时进行排名,我打开每个单词的bucket数据,然后查找连续的位置匹配,即排名较高,只是一个简单的相关性排名。
问题是,我需要检查算法中的所有结果,以便按“排名分数”排序,即使我每页只显示10个。
有人知道解决这个问题的方法吗?也许我需要把文档放在索引里?
最佳答案
除了token_word | docid,position;docid,position;docid,position;
方法之外,我建议您添加一个token_word | docid,frequency;docid,frequency;docid,frequency;
记录。
这样,您只需在响应查询时考虑一次文档。这可能会增加预处理,但会减少用户查询时无用的开销。
处理多个单词查询(即几乎所有查询)时可能会遇到问题,因此对一些接近或并列的结果采用docid,position
方法。
如果我处在你的位置,我会做什么:因为你每页显示10个结果,我会根据频率索引所有文档,然后根据位置只为第一页的前10个索引。如果用户移动到第二页,则对其执行相同的操作。
这种方法的一个缺陷是,有时第n+1页上的前几个结果可能比第n页上的最后几个要好。
关于performance - 使用倒排索引对搜索结果进行排名的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7703481/