2012-11-06 69 views
0

我想了解背景中到底發生了什麼。Lucene的多字段索引究竟是什麼

給定倒轉索引的簡化模型(忘記位置和分數): 對於每個單詞都有一個文檔ID的排序列表。 多字詞查詢與那些排序列表相交以產生另一個這樣的列表。 (最後有排名)

例如

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

以下對字段的理解是否正確?

不同的字段表示不同的索引空間或至少不同的列表。例如具有領域抽象和身體可能最終在這樣一個情景:

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

這種理解是否正確?如果不是,這些領域在底層倒排指數方面是什麼?我找不到任何明確說明它是如何在內部完成的文檔。

除此之外,我想知道是否有一些功能支持搜索所有/任何字段。如果像我認爲的那樣實施,這應該是麻煩的或者需要通過保持如上所述的列表來冗餘。通過完整的單詞列表的子範圍來實現字段當然可以表現得更好。

很高興知道Lucene實際上做了什麼。

回答

1

由於Lucene 4.0,每個字段有不同的術語字典,因此您的抽象和正文的發佈列表將單獨存儲。

除此之外,我想知道是否有一些功能支持搜索所有/任何字段。如果像我認爲的那樣實施,這應該是麻煩的或者需要通過保持如上所述的列表來冗餘。通過完整的單詞列表的子範圍來實現字段當然可以表現得更好。

不確定要理解「子範圍或完整的詞表」的含義,但是如果您在多個字段上運行布爾查詢,Lucene會即時合併發佈列表。

很高興知道Lucene實際上做了什麼。

源代碼可以自由訪問。 :-)

+0

對於子範圍,我的意思是沿着每個單詞的單個發佈列表(在所有字段上)以及原始單詞列表中每個字段的附加列表,用於適合該字段的那些發佈。我可以看到這有幾個問題,但我想確定。 –