2013-11-01 37 views
1

我想知道是否可以從SolrJ發佈JSON/XML字符串。如何將對象從字符串平鋪到SolrInputDocument

我目前正在接收來自某些消息服務的文檔作爲JSON字符串。

一個這樣的文件是如下:

{ 
    "id":"1","name":"Item 1","price":10, 
    "producer":{"id":"10","name":"Prod 1", 
    "address": {"id":"100","city":"City 1","zipcode":95000} 
    } 
} 

我需要這個字符串SolrInputDocument爲它服務到Solr轉換?

我目前正在使用SolrJ,並沒有看到直接向JSON提供Solr的API。

(我看到附帶的Solr post.jar能夠直接張貼JSON/XML文檔到Solr,我會通過SolrJ API喜歡相同的行爲)

如果沒有這樣的API,我該怎麼辦將字符串轉換爲SolrInputDocument?

回答

0

您不需要將其轉換爲SolrInputDocument。請參閱 http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr

但Solr不允許嵌套字段。你需要扁平化你的JSON,即只保留標量,而數組(或列表)只能作爲多值字段。你可以把它轉換是這樣的:

{ 
    "id":"1", 
    "name":"Item 1", 
    "price":10, 
    "producer_id":"10", 
    "producer_name":"Prod 1", 
    "producer_address_id":"100", 
    "producer_address_city": "city1", 
    "producer_address_zipcode":95000 
} 

,或者您也可以保持生產地址在多值字段是這樣的:

{ 
    "id":"1", 
    "name":"Item 1", 
    "price":10, 
    "producer_id":"10", 
    "producer_name":"Prod 1", 
    "producer_address":["100", "city1", "95000"] 
} 

哪一個你應該選擇取決於你的查詢需求。

+0

謝謝@arun。我無法直接添加POJO,因爲我從消息傳遞服務中獲取了json字符串(對應於POJO)。 要將該json字符串轉換回POJO,需要我在我的應用程序中加載的類與消息傳遞服務進行交互,這將非常麻煩。 所以我想,我將不得不手動扁平我的JOSN字符串。 不確定如何管理schema.xml。 你知道任何可以爲我做的圖書館/工具嗎? 此外,請建議是否可以使用「。」。而不是「_」來壓扁JSON? – user2250246

+0

schema.xml需要根據您的搜索要求進行設計。我不確定是否有任何工具可以爲您自動生成架構,但即使它們存在,也需要決定您的搜索要求。字段名稱使用'.'而不是'_'來表示字段名稱。 – arun