0

我试图了解背景中到底发生了什么。

给定倒排索引的简化模型(忘记位置和分数):对于每个单词,都有一个文档 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 实际上做了什么。

4

1 回答 1

1

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

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

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

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

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

于 2012-11-07T22:07:31.637 回答