2011-01-28 75 views
0

這可能嗎?我無法直接訪問數據庫 - 只能通過數據對象訪問。 我能夠搜索索引,如果項目返回像ArrayList的東西?存儲在數據庫中的lucene索引使用java中的數據對象

如果這是不可能的,有什麼辦法可以使用Lucene(或其他工具)對使用java的對象進行模糊匹配嗎?

例如,我有一個Person對象具有FirstName和LastName。我想在名稱上做一個模糊的匹配。 因此,假設我有一個x數量的Person對象數組,是否會有一種循環每個Person對象並比較名稱的有效方法?

回答

0

取這些數據對象並在它們上面建立一個單獨的Lucene索引,存儲你需要的字段。使用你的Person示例,每個Lucene文檔都是[Id,FirstName,LastName]。搜索此索引將返回查詢數據庫所需的Id以獲取完整的數據對象。

實際的索引很簡單,您只需要檢索數據對象列表,迭代它們,生成Lucene文檔並使用IndexWriter存儲它們。您可以針對持久性存儲的文件系統目錄或內存中的存儲進行處理。

0

這些是我想到的可能解決方案 - 但是,我不能將索引存儲在FSDirectory(項目規格不允許這樣),對於RAMDirectory,我們需要數以千計的Person對象通過搜索,所以我不知道內存存儲是否適合這種情況。

是否有任何其他類型的模糊匹配算法,我可以使用這將有效的大型數據集?

+0

我相信這是通過回答的評論。對於Lucene來說,幾千個文檔沒有任何問題,並且每個1 kb的一萬個文檔仍然只有10 MB的內存。我不知道你打算使用什麼fzzu算法,但是你可能想看看可以用Levensthein距離來使用模糊匹配的BKTree結構。 – sisve 2011-01-28 17:32:33