我想將java對象存儲爲Solr文檔的一部分。 它們不需要進行分析或搜索,只能作爲文檔的一部分返回。 我可以將它們轉換爲json或XML並存儲文本,但我更喜歡更高效的東西。 如果我可以使用Java序列化,然後將二進制blob添加到文檔,它可能是理想的。 我知道用base64轉換二進制blob的選項,但我想知道是否有更有效的方法。如何在Solr上存儲java對象
回答
我不同意前兩個答案的意見。
在某些情況下,額外的數據庫調用可能完全不必要,Solr也可以充當NoSQL數據庫。
對於某些字段,它甚至可以使用壓縮,這會影響CPU成本,但會爲某些類型的二進制數據保存一些高速緩存。
看看BinaryField和schema.xml中的延遲加載字段聲明。
SOLR無法使用壓縮。這在一段時間之前已被棄用。但是,在將它發送給SOLR之前,您可以自己壓縮字段是BinaryField還是base64編碼的字符串。 – 2012-03-17 07:10:37
@邁克爾狄龍感謝您指出這種情況 - 似乎我的知識在這方面有點過時 – Omnaest 2012-03-19 12:26:52
正如你可以在Solr中構造一個id來傳遞任何文檔一樣,你可以用其他方式(例如數據庫)存儲這個對象,並在你從solr獲得id時查詢它。
例如,我們正在將網頁存儲在Solr中。當我們爲它建立索引時,我們創建一個id,它與數據庫中由ORM創建的WebPage對象的id相匹配
當執行搜索時,我們得到id並從數據庫加載java對象
沒有必要將其存儲在Solr中(其中已經取得存儲和索引文件)
我同意Solr並非真正被設計爲持久性存儲,特別是對於二進制對象。 – 2012-01-13 12:42:19
我完全是第二。雖然我確信你可以想出一些破解將一個序列化的Java對象放入你的Solr索引中,但我不會推薦它。將它存儲在其他地方。從長遠來看,以這種方式使用Solr索引只會傷害你。性能會下降,索引大小會增加,主/從複製需要更長的時間,等等。 – rfeak 2012-01-14 04:05:26
謝謝。我已經開始使用該選項,但希望將性能與僅Solr解決方案進行比較。 – 2012-01-15 00:22:17
我同意,你不應該使用Solr的數據庫,尤其不適合二進制數據。我建議你使用NoSQL數據庫之一(如Neo4j,MongoDB,CouchDB,Riak,...)cuz'他們中的大多數支持json/bson,並且可以與Solr很好地工作,其實也是NoSQL,文檔類型,搜索專用數據存儲。
例如,您可以使您的自定義Solr請求處理程序使用返回的文檔的doc ID(主鍵)查詢NoSQL數據存儲並編寫搜索響應。此外,在收到Solr響應後,您可以直接從客戶端應用程序查詢NoSQL db。
- 1. 如何在HttpSession中存儲Java對象?
- 2. 如何在使用JAVA的對象存儲中創建對象?
- 3. 如何在Neo4j中存儲對Java對象的引用?
- 4. Solr如何存儲文件
- 5. 如何存儲對象
- 6. 在Java中存儲Javascript對象
- 7. 在String對象中存儲/ n。 Java
- 8. 存儲在對象
- 9. 在solr文件中存儲n + 1個對象
- 10. 如何在resque中存儲Tmail對象
- 11. 的java通用對象如何在數據結構存儲
- 12. 如何檢索存儲在Java ArrayList中的對象值
- 13. Java如何將對象存儲在列表中?
- 14. 如何使用Java客戶端在Riak中存儲對象?
- 15. 如何刪除存儲在Java的FileOutputStream中的單個對象
- 16. 將java對象存儲在HTML5本地存儲中
- 17. Java Script對象存儲在磁盤上的位置是什麼?
- 18. solr:如何在使用FileListEntityProcessor時存儲相對路徑
- 19. 檢查對象等於存儲在java對象中的數據
- 20. 如何在本地存儲中存儲對象數組?
- 21. SOLR如何可以成爲與未存儲在SOLR
- 22. 存儲對象
- 23. 如何上傳對象存儲在爪哇的堆
- 24. 如何原始值存儲在對象,當對象被投
- 25. Java HashMap來存儲不同的對象
- 26. 迭代器Java來存儲對象
- 27. Java - 對象不能存儲數據
- 28. Google appengine可以存儲Java對象POJO
- 29. 如何將存儲爲java對象的對象變量傳遞給存儲爲java對象的另一個對象的Function?
- 30. Java轉儲對象
感謝您提供其他優秀的替代品。我的對象非常小,我想比較將它們直接返回到solr查詢結果與數據庫選項的性能。 – 2012-01-15 00:19:26