2011-12-02 49 views
3

在lucene索引的多個字段中重新索引相同值的影響是什麼?Lucene中多個字段的重複值的影響

這個想法是,某人的名字是他們的名字和他們的一般細節的一部分。所以我想要將該值編入多個字段。特德·布洛斯我還不指標如下:

Field  | Value 
-------------|--------- 
firstName | Ted 
lastName  | Blogs 
name   | Ted 
name   | Bloggs 
general  | Ted 
general  | Bloggs 
all   | Ted 
all   | Bloggs 

通過這樣做,我可以很容易地形成領域的範疇,但是我很擔心它可能有不利的性能和/或磁盤使用情況的影響。

任何人都可以提出建議,請

回答

4

@aishwarya是正確的,但它一點點擴大:

the docs

此文件由期限排序。術語首先以術語的字段名稱按字典順序(通過UTF16字符編碼)排序,並且按術語的文本按字典順序排列(按UTF16字符編碼)。

該術語將被存儲一次每場,所以如果你重複每個術語五次你的存儲將是五倍大。然而,術語dic的大小與原始數據的大小是對數的,所以我懷疑你會遇到問題。

性能損失將不存在(每個字段開始的Lucene緩存),除非擁有更多數據會強制內存不足。對於大多數搜索基礎設施,您可能會有一個低於幾GB的指數,無論如何,這將很容易適應內存。

1

Lucene的索引是很好的優化,所以我不會太擔心這裏的性能或磁盤使用率。話雖如此,與直接進行單列精確搜索相比,您的用例肯定會有較差的性能,但不會太令人擔憂。

+0

我會說他的用法是處理單個字段的多個值的可接受和最佳實踐。 – goalie7960

+0

哦,是的,我不是故意質疑他的用法!我要說的是,就用例而言,肯定會有一些性能開銷,但沒有太多值得擔憂的地方。 – aishwarya

4

Xodarap的解釋是不錯的,只是多補充一些:

最好想想Lucene的領域的方式是每一個爲自己的微型倒排索引,但文檔ID排列/並行所以你可以做不同領域的分離/連接。

添加大量字段時需要注意的一件事:默認情況下,每個字段都有一個用於長度歸一化的ram加載的字節[maxdoc]。因此,在許多文檔和大量字段中,都啓用了長度標準化,這可以咀嚼一些空間。

看看你的用例長度規範化對於像firstName/LastName這樣的字段來說可能並不是非常有用,所以你可能想要在這些短的字段上使用omitNorms()。