2013-03-19 106 views
3

我已經將一組json對象存儲到lucene索引中,並且還想從索引中檢索它。我正在使用lucene-3.4。從lucene索引存儲和檢索Json對象

那麼有沒有任何庫或簡單的機制,使這種情況發生在lucene。

對於樣品:JSON對象

{ 
    BOOKNAME1: { 
     id:1, 
     name:"bname1", 
     price:"p1" 
    }, 
    BOOKNAME2: { 
     id:2, 
     name:"bname2", 
     price:"p2" 
    }, 
    BOOKNAME3: { 
     id:3, 
     name:"bname3", 
     price:"p3" 
    } 
} 

任何種類的幫助將不勝感激。 在此先感謝,

+0

我假定索引中的每個條目都是一個JSON對象,如果我錯了,請糾正我。你想讓對象的內部組件可被搜索嗎?例如,搜索bname2將返回相應的json對象。你想要基於現場的搜索?即「id:2」,「price:p3」類型的搜索能力。 – phani 2013-03-19 14:39:13

+0

@phani不,我不想在json字段上搜索。只是我想要存儲和檢索它們作爲json對象 – 2013-03-20 05:51:54

+0

在那種情況下,javanna已經回答了哪些符合您的要求。但是,我不確定你是否有任何與每個json對象關聯的唯一ID。 – phani 2013-03-20 13:56:42

回答

4

如果你不想在json內搜索,但只存儲它,你只需要提取id,這將有希望是唯一的。那麼你的Lucene的文件將有兩個字段:

  • 的ID(索引,不一定存儲)
  • json的本身,因爲它是(僅存儲)

一旦你存儲在您的JSON在lucene你可以通過id來檢索它。

另一方面,這幾乎是elasticsearch對您的文檔所做的。你只需通過REST api發送一些json。 elasticsearch將保持json原樣,並且默認情況下可以搜索它。這意味着你可以通過id檢索json或者根據它進行搜索,不需要編寫任何代碼即可。

此外,使用lucene,只有在您提交文檔或重新打開索引閱讀器之前,您的文檔纔可用,而elasticsearch會爲其添加方便的事務日誌,因此GET始終是實時的。

此外,elasticsearch提供了更多:一個很好的分佈式基礎結構,刻面,腳本等等。一探究竟!

7

我會建議你索引你的JSON對象是:

1)將給您的JSON文件。我通常使用json simple

2)打開使用IndexWriterConfig

3的索引)添加文檔的索引。

4)提交更改並關閉該指數

5)運行查詢

如果你想使用Lucene的核心,而不是elasticsearch,我創建了一個示例項目,它得到作爲輸入文件與JSON對象並創建一個索引。另外,我添加了一個測試來查詢索引。

我使用的是最新版本的Lucene(4.8),請看看這裏:

http://ignaciosuay.com/getting-started-with-lucene-and-json-indexing/

如果你有時間,我認爲這是值得一讀「的Lucene在行動」。

希望它有幫助。

+1

這應該是選擇的答案(它處理實際問題)! – 2015-01-08 07:30:50