我的倒排索引是这样的:
token_word |文档ID,位置;文档ID,位置;文档ID,位置;
在算法中,为了在查询短语时排名,我打开每个单词的桶数据,然后查找连续位置匹配,排名更高,只是一个简单的相关性排名。 问题是,我需要检查算法中的所有结果,以便按“排名得分”排序,即使我每页只显示10个。
任何人都知道解决这个问题的方法吗?也许我需要在索引本身中对docid进行排名?
答案 0 :(得分:4)
除了token_word | docid,position;docid,position;docid,position;
方法外,我建议您添加token_word | docid,frequency;docid,frequency;docid,frequency;
条记录。
这样,您只需在响应查询时考虑一次文档。这可能会增加预处理,但会在用户查询时减少无用的开销。
您可能在处理多个单词查询时遇到问题(即几乎所有查询),因此对{em>某些结果采用docid,position
方法,领带。
如果我在你的位置,我会怎么做:由于你每页显示10个结果,我会根据频率索引所有文档,然后根据位置仅为第一页索引前10个。如果用户移动到第二页,则对第二页执行相同的操作。
这种方法的一个缺陷是,有时页面 n + 1 上的前几个结果可能会比 n 页面上的最后几个结果更好。