2012-01-13 114 views
0

我想將java對象存儲爲Solr文檔的一部分。 它們不需要進行分析或搜索,只能作爲文檔的一部分返回。 我可以將它們轉換爲json或XML並存儲文本,但我更喜歡更高效的東西。 如果我可以使用Java序列化,然後將二進制blob添加到文檔,它可能是理想的。 我知道用base64轉換二進制blob的選項,但我想知道是否有更有效的方法。如何在Solr上存儲java對象

+0

感謝您提供其他優秀的替代品。我的對象非常小,我想比較將它們直接返回到solr查詢結果與數據庫選項的性能。 – 2012-01-15 00:19:26

回答

0

我不同意前兩個答案的意見。

在某些情況下,額外的數據庫調用可能完全不必要,Solr也可以充當NoSQL數據庫。

對於某些字段,它甚至可以使用壓縮,這會影響CPU成本,但會爲某些類型的二進制數據保存一些高速緩存。

看看BinaryField和schema.xml中的延遲加載字段聲明。

+0

SOLR無法使用壓縮。這在一段時間之前已被棄用。但是,在將它發送給SOLR之前,您可以自己壓縮字段是BinaryField還是base64編碼的字符串。 – 2012-03-17 07:10:37

+0

@邁克爾狄龍感謝您指出這種情況 - 似乎我的知識在這方面有點過時 – Omnaest 2012-03-19 12:26:52

2

正如你可以在Solr中構造一個id來傳遞任何文檔一樣,你可以用其他方式(例如數據庫)存儲這個對象,並在你從solr獲得id時查詢它。

例如,我們正在將網頁存儲在Solr中。當我們爲它建立索引時,我們創建一個id,它與數據庫中由ORM創建的WebPage對象的id相匹配

當執行搜索時,我們得到id並從數據庫加載java對象

沒有必要將其存儲在Solr中(其中已經取得存儲和索引文件)

+1

我同意Solr並非真正被設計爲持久性存儲,特別是對於二進制對象。 – 2012-01-13 12:42:19

+0

我完全是第二。雖然我確信你可以想出一些破解將一個序列化的Java對象放入你的Solr索引中,但我不會推薦它。將它存儲在其他地方。從長遠來看,以這種方式使用Solr索引只會傷害你。性能會下降,索引大小會增加,主/從複製需要更長的時間,等等。 – rfeak 2012-01-14 04:05:26

+0

謝謝。我已經開始使用該選項,但希望將性能與僅Solr解決方案進行比較。 – 2012-01-15 00:22:17

0

我同意,你不應該使用Solr的數據庫,尤其不適合二進制數據。我建議你使用NoSQL數據庫之一(如Neo4j,MongoDB,CouchDB,Riak,...)cuz'他們中的大多數支持json/bson,並且可以與Solr很好地工作,其實也是NoSQL,文檔類型,搜索專用數據存儲。

例如,您可以使您的自定義Solr請求處理程序使用返回的文檔的doc ID(主鍵)查詢NoSQL數據存儲並編寫搜索響應。此外,在收到Solr響應後,您可以直接從客戶端應用程序查詢NoSQL db。