2013-09-23 99 views
2

我試圖通過發佈RAW JSON數據來更新SOLR索引,版本4.4.0。更新多值字段,沒有獲取SOLR索引中的多個值

它的更新字段很好,但在多值字段的情況下,它不存儲多個值,但只存儲最後一個值。

對於e.g-

我。這裏是我的模式結構 -

<dynamicField name="amenity_*" type="text_general" indexed="true" stored="true" multiValued="true"/> 

ii。這裏是POST JSON數據 -

{"add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Overnight Parking"}},"boost":1.0,"overwrite":true,"commitWithin":1000}, 
    "add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Pumps"}},"boost":1.0,"overwrite":true,"commitWithin":1000}, 
    "add":{ "doc":{"id":"7986","amenity_GENERAL":{"set":"Parking Spaces"}},"boost":1.0,"overwrite":true,"commitWithin":1000}} 

一個成功的文章後,此id的更新的索引是 -

 { 
     "id": "7986", 
     "amenity_GENERAL": [ 
      "Parking Spaces" 
     ], 
     "_version_": 1446999052093751300 
     }, 

- 它的存儲從JSON請求的最後一個值 - 「amenity_GENERAL」。

我不確定,如果我需要更改該多值字段的POST JSON結構或不。

在此先感謝。


編輯:該腳本將運行到一個cron,所以每次需要做索引的更新。在多值字段的情況下,需要避免重複值。

回答

4

參見:http://yonik.com/solr/atomic-updates/

set - 設置或更換一個特定的值,或者如果null被指定爲新的值

add刪除值 - 增加了一個額外的價值列表

即嘗試

"amenity_GENERAL":{"add":"Parking Spaces"} 
+0

感謝您的回覆。是的,使用'add',而不是'set',但是我的腳本會在一段時間後在CRON中運行。我想每次都要全面更換。做一個'添加',只會繼續添加相同的值到數組中。任何建議?在此先感謝 –

+0

不能使用'set'作爲第一次更新清空值,然後使用'添加'爲新條目? – arun

+0

「設置」爲null添加空字符串。因此,對第一個條目進行「設置」,然後「添加」其他條目。但只是想知道是否有任何其他 更簡單的方法。 BTW,thnx –