【发布时间】:2011-12-03 09:08:03
【问题描述】:
允许这样做的存储和搜索的内部结构是什么?就像在细节中一样?
例如,我有一百万个文档与一个词匹配,还有一百万个文档与 AND 查询的第二个词匹配。 lucene怎么这么快就给我top k了?
它是否按每个术语的文档 IDS 递增的顺序存储文档?然后,当两个术语的文档必须相交时,它会在这两个集合中查找第一个公共的 k 个文档,方法是在一次遍历中递增地迭代它们。
或者,它是否使用较大文档数组中的简单无序散列集来查找公共文档?
或者是否根据用户询问的文档数量、由单个术语匹配的文档等以及其他因素来使用这两种(或可能更多)类型的交叉策略?
任何能指出文档数组合并细节的文章将不胜感激。
编辑: 感谢您的信息。现在说得通了。跳过列表很神奇。我会更深入地研究它以获得清晰的理解。
【问题讨论】:
-
Lucene 使用文档编号,而不是完整的文档本身,因此任何方法都可以。我敢打赌,每个术语都会使用有序的文档编号,但如果您真的对所有细节感兴趣,那么值得看看源代码。
-
很好的问题和答案。考虑到有多少人使用 Lucene/Solr 进行全文和其他非文本字段搜索,我对这里积累的选票如此之少感到惊讶。
标签: search lucene full-text-search full-text-indexing