允许存储和搜索的内部结构是什么?如同细节一样?
例如,我有一百万个文档与一个术语匹配,一百万个其他文档与一个AND查询的第二个术语相匹配。 lucene如何快速地为我提供顶级k?
它是否按照每个学期增加doc IDS的顺序存储文档?然后,当两个术语的文档必须相交时,它会通过在一次传递中逐步迭代它们来查找两个集合中的第一个常见k文档。
或者,它是否使用较大的文档数组中的简单无序哈希集来查找常用文档?
或者是否使用这种(或可能更多)类型的交叉点政策取决于用户提出的文件数量,与个别条款相匹配的文件等等?
任何可以指出文档数组合并的细节的文章都将受到赞赏。
编辑: 谢谢你们的信息。现在有道理。跳过列表可以发挥魔力。我将深入挖掘它以获得清晰的理解。
答案 0 :(得分:4)
答案 1 :(得分:1)
Lucene将根据情况与已排序的文档ID相交或使用bitset的窗口。请参阅BooleanScorer顶部的评论。
答案 2 :(得分:1)
交点类似于sort-merge join,但ID已经排序。有关详细信息,请参阅this blog post。