2012-01-25 89 views
0

我正在使用Lucene搜索聯繫人數據庫。通過聯繫我的意思是名稱,多個電話號碼,電子郵件,地址等等。在數據庫中,這些顯然分爲單獨的字段,甚至分開的表格。我希望能夠根據任何字段搜索聯繫人,例如我可以鍵入「John Doe」,Lucene會返回John Doe的聯繫信息。 John Doe也有一個電話號碼,我希望能夠通過輸入該電話號碼,地址或電子郵件等來找到他的記錄。我不想特別說明我正在尋找哪個字段。構建搜索聯繫人的Lucene搜索索引的最佳方法

創建我的索引時,最好是將所有數據合併到單個「數據」字段中,還是將它們分開?我不會將數據存儲在索引中,除了我將用來從數據庫檢索所有其他數據的ID之外。標準分析器和查詢分析器能夠很好地適應我的情況,還是應該採取更多的自定義方法?

我對Lucene來說相當新,而且我剛剛學習它真的有多強大,所以我並不反對真正進入它並創建一些複雜的自定義搜索查詢,但我會需要一些方向來做到這一點,並希望如果沒有必要,就不要做所有這些事情。

回答

1

您不需要創建單個組合字段,保持它們分離可能是一個更好的設計決策。想想下去,你可能想做專門的搜索。

可以使用MultiFieldQuery搜索所有的領域,如姓名,地址,市...

+0

KISS - 每給定電流要求的單一包羅萬象的領域將是最好的選擇在簡單性方面和空間和搜索速度。此外,現代用戶不需要指定哪個字段進行搜索。他們希望系統能夠自己找出Ala google的搜索欄。 –

1

使用單個搜索字段是最有效的解決方案。這將使您的索引更小,更快搜索。即使您存儲了字段,您仍然可以爲搜索使用一個單一的聚集索引(但未存儲)字段,並且每個聯繫信息都有一個存儲(但未編入索引)字段。

標準分析器和查詢分析器將幫助您快速建立一個原型,但您可能需要使用自定義的分析,以提高你的應用程序,例如,如果你想:

  • 查詢給予同樣的結果(ASCIIFoldingFilter),
  • ,以處理電話號碼中的空格(以便對「0532」的查詢匹配「0532」以及「05 32」)。