2011-12-13 122 views
1

我發現了許多關於SO和其他地方的問題,這些問題沿着「如何索引並在Lucene中搜索關係數據」的方式提出問題。相當正確的是,這些問題符合標準的迴應,即Lucene不是用來模擬這種數據的。這個報價我發現它總結...什麼是使用Lucene索引和搜索我的數據的最佳方式?

Lucene索引是一個文檔存儲。在文檔存儲中,單個 文檔表示一個概念,其中存儲到 的所有必要數據表示該概念(與在RDBMS中的多個表格上傳播 相比,需要幾次加入到 重新創建的概念)。

所以我不會問這個問題,而是我提供高層次的需求,看看有沒有Lucene的大師在那裏可以幫助我。

  • 我們對人(姓名,性別,出生日期,國籍等)
  • 和數據公司(姓名,國籍,城市等)的數據。
  • 我們還有關於這兩種類型的實體如何在公司工作的人員(人員,公司,角色,開始日期,結束日期等)相互關聯的數據。

我們有兩個實體 - 人員和公司 - 具有自己的屬性,然後存在屬性用於它們之間的多對多鏈接。

一些例如搜索可能如下......

  • 找到所有公司在澳大利亞
  • 找到兩個日期間出生
  • 查找誰已經爲.NET開發人員工作了的人都人民
  • 找到所有在倫敦工作過的.Net開發人員。
  • 找到所有誰曾作爲一個.NET開發人員2008年和2010

之間的標準的人跨越所有的三組數據。我們的要求是提供一個Faceted Search的數據,接受任何組合的各種屬性,我已經給出了一些例子。

我想爲此使用Lucene.Net。我們是一個.Net軟件公司,所以感覺有點被java嚇倒。不過,歡迎提供所有建議。

我知道這樣的想法,該索引應該在考慮搜索的情況下構建。但我似乎無法拿出,將符合搜索條件的

  • 什麼類原產於Lucene的還是什麼擴展點我們可以利用的所有組合明智的指數。
  • 是否有這樣的事情建立技術?
  • 有沒有我錯過的第三個開源貢獻會幫助我們呢?

現在我不會描述我們考慮過的情況,因爲我不想讓這個問題膨脹並使其過於恐嚇。請在必要時詳細說明。

+0

我不認爲Lucene.Net(或任何其他文本搜索發動機)非常適合您的需求。也許你應該用'嵌入式databases'去 –

+2

考慮提出這個[email protected]郵件列表 – Prescott

+1

在我第二@普雷斯科特的建議。這是一個友好的名單,他們願意幫助,如果你提供足夠的信息(你在這裏做的)。 1建議(現在沒有太多時間)你說:「但我似乎無法提出一個合理的索引,將滿足搜索標準的所有組合」..這真的沒有必要。如果你不能把它與1概念性文件型工作..(例如:帶有扁平公司的人)使用2(公司與flattend人)等。(順便說一句過分簡化)。我對.Net端口沒有任何認識。如果我是你,我會在問題中忽略這個名單 –

回答

2

爲企業和人民存儲在一個單一的指數,你可以創建一個type字段標識它們所描述的實體類型的文件。

生日可以存儲爲日期字段。

你可以給每個人包括他們的工作爲公司名稱的簡單的文本字段。請注意,如果您輸入的索引中沒有文檔所代表的公司,則不會收到錯誤。 Lucene不是一個關係數據庫工具,但你知道。

(對不起,我還沒有發佈任何鏈接到API;我熟悉Lucene的核心,但不是Lucene.NET)

+0

謝謝@larsmans。我們實際上已經考慮過這種索引結構,但是我不知道你是否能夠幫助我解釋結果的問題。我會更新我的問題... –

+0

其實,在我這樣做之前。你如何看待角色被存儲在公司一側,這些角色已經是Person文檔的一部分?每個公司/角色對必須是分開的,因此兩者的匹配可以被正確識別 - 然後當然有角色的開始/結束日期。你是否認爲需要第三種文檔類型的「角色」,如果是的話,我們如何將它們「鏈接」在一起? –

+0

一個選項是每個公司/角色對實際建模爲單個值。 [公司X角色] - > int例如。將其存儲在多值字段中。讓你的客戶知道如何對它進行編碼/解碼等。目前還沒有針對每個角色的開始/結束的答案。也許這將有助於指定您可能遇到的查詢,包括這些角色x開始/結束日期組合 –

相關問題