【问题标题】:What exactly are Lucene's multi field indexesLucene 的多字段索引到底是什么
【发布时间】:2012-10-26 10:12:44
【问题描述】:

我试图了解后台到底发生了什么。

给定倒排索引的简化模型(忘记位置和分数): 对于每个单词,都有一个排序的文档 ID 列表。 多个单词查询与这些排序列表相交以产生另一个这样的列表。 (最后有排名)

例如

word1: 1 3 7 9 10 11 ...
word2: 2 3 4 9 10 12 ...

以下对字段的理解是否正确?

不同的字段意味着不同的索引空间或至少不同的列表。例如拥有 abstract 和 body 字段可能最终会出现这样的场景:

abstract:word1 7 10 ...
body:word1     1 3 9 10 11 ...
abstract:word2 3 4 ...
body:word2     1 3 9 10 12 ...

这种理解正确吗?如果不是,就底层倒排索引而言,这些字段是什么?我找不到任何明确说明它是如何在内部完成的文档。

除此之外,我想知道是否支持在所有/任何字段中搜索等功能。如果像我假设的那样实施,这应该很麻烦,或者需要通过保留上面的列表来实现冗余。通过完整单词列表的子范围实现字段当然可以更好地执行。

很高兴知道 Lucene 实际做了什么。

【问题讨论】:

    标签: lucene indexing inverted-index


    【解决方案1】:

    从 Lucene 4.0 开始,每个字段都有不同的术语字典,因此您的摘要和正文的发布列表将分开存储。

    除此之外,我想知道是否支持在所有/任何字段中搜索等功能。如果像我假设的那样实施,这应该很麻烦,或者需要通过保留上面的列表来实现冗余。通过完整单词列表的子范围实现字段当然可以更好地执行。

    不确定您所说的“子范围或完整单词列表”是什么意思,但是如果您对多个字段运行 BooleanQuery,Lucene 将即时合并发布列表。

    很高兴知道 Lucene 实际做了什么。

    源代码可免费访问。 :-)

    【讨论】:

    • 对于子范围,我的意思是每个单词的单个发布列表(在所有字段中)和原始单词列表中每个范围字段的附加列表,用于那些适合该字段的帖子。我可以看到这有几个问题,但我想确定一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2012-02-12
    • 2020-05-03
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多