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