簡體   English   中英

Lucene和SQL Server-最佳實踐

[英]Lucene and SQL Server - best practice

我對Lucene來說還很陌生,所以想從你們這里得到一些幫助:)

背景:目前,我有存儲在SQL Server中的文檔,並且想使用Lucene對SQL Server中的那些文檔進行全文/標記搜索。

Q1)在這種情況下,為了對文檔進行關鍵字搜索,我是否應該將所有這些文檔都插入到Lucene索引中? 這是否意味着會有數據重復(一個在SQL Server中,另一個在Lucene索引中?),這可能是一個問題,因為我們有大量的文檔(大約100GB)。 這是不可避免的嗎?

Q2)此外,每個文檔都有一組標簽(最多3個)。 Lucene還是標簽搜索的好選擇? 如果是這樣,該怎么辦?

謝謝,

是的,通過Lucene提供全文搜索並通過傳統數據庫提供數據存儲是一個受支持的體系結構。 在這里看看 ,以作簡要介紹。 一種典型的實現方式是對希望支持搜索的任何內容建立索引,並在Lucene索引中僅存儲唯一標識符,並基於ID從數據庫中檢索通過搜索找到的所有記錄。 如果要減少數據庫負載,可以在Lucene中存儲一些信息以顯示搜索結果列表,並且僅查詢數據庫以獲取完整文檔。

至於節省空間,將有一些重復措施。 即使您只是Lucene,也是如此。 Lucene將用於搜索的倒排索引與存儲的數據完全分開存儲。 為了節省空間,我建議您謹慎選擇要索引的數據以及需要存儲和以后檢索的數據。 存儲的內容對於節省Lucene的空間尤為重要,因為在大多數情況下,僅索引值往往非常節省空間。

Lucene當然可以實現標簽搜索。 實現它的簡單方法是在構建文檔時,將每個標簽添加到您選擇的字段中(我稱之為“標簽”,這似乎很有意義),例如:

document.add(new Field("tags", "widget", Field.Store.NO, Field.Index.ANALYZED));
document.add(new Field("tags", "forkids", Field.Store.NO, Field.Index.ANALYZED));

並且我可以簡單地在所有查詢中添加必需的術語,以僅在特定標簽內進行搜索。 例如,如果我要搜索“一些東西”,但僅使用標簽“ forkids”,則可以編寫如下查詢:

some stuff +tags:forkids

文檔也可以存儲在Lucene中,您可以使用文檔ID檢索和引用它們。

我建議在Lucene的頂部使用Solr http://lucene.apache.org/solr/ ,它更加用戶友好,並且默認情況下具有multiValued字段(用於標記)。

http://wiki.apache.org/solr/SchemaXml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM