[英]How to update multiple documents in Solr with JSON?
如何使用 JSON 更新 Solr 4.5.1 中的多個文檔? 我試過這個,但它不起作用:
POST /solr/mycore/update/json
:
{
"commit": {},
"add": {
"overwrite": true,
"doc": [{
"thumbnail": "/images/404.png",
"url": "/404.html?1",
"id": "demo:/404.html?1",
"channel": "demo",
"display_name": "One entry",
"description": "One entry is not enough."
}, {
"thumbnail": "/images/404.png",
"url": "/404.html?2",
"id": "demo:/404.html?2",
"channel": "demo",
"display_name": "Another entry",
"description": "Another entry is required."
}
]
}
}
Solr 期望每個文檔的 JSON 結構中有一個“添加”鍵(如果您考慮對象中鍵的原始含義,這可能看起來很奇怪),因為它在進行索引時直接映射到 XML 格式 -這樣你就可以為每個文檔單獨擁有元數據。
{
"commit": {},
"add": {
"doc": {
"id": "321321",
"name": "barfoo"
}
},
"add": {
"doc": {
"id": "123123",
"name": "Foobar"
}
}
}
.. 工作。 我認為允許一個數組作為“add”引用的元素會更有意義,但我沒有進一步挖掘源代碼或知道這背后的推理。
我了解(至少)從 solr 4.0 及更早版本開始,此問題已得到修復。 查看http://wiki.apache.org/solr/UpdateJSON 。
在 ./exampledocs/books.json 中有一個包含多個文檔的 json 文件示例。
[
{
"id" : "978-0641723445",
"cat" : ["book","hardcover"],
"name" : "The Lightning Thief",
"author" : "Rick Riordan",
"series_t" : "Percy Jackson and the Olympians",
"sequence_i" : 1,
"genre_s" : "fantasy",
"inStock" : true,
"price" : 12.50,
"pages_i" : 384
}
,
{
"id" : "978-1423103349",
"cat" : ["book","paperback"],
"name" : "The Sea of Monsters",
"author" : "Rick Riordan",
"series_t" : "Percy Jackson and the Olympians",
"sequence_i" : 2,
"genre_s" : "fantasy",
"inStock" : true,
"price" : 6.49,
"pages_i" : 304
},
...
]
雖然@fiskfisk 答案仍然是有效的 JSON,但從數據結構中序列化並不容易。 這個是。
elachell 是正確的,如果您只是使用默認設置添加文檔,則數組格式將起作用。 不幸的是,例如,如果您需要為某些文檔添加自定義增強或更改覆蓋設置,則這將不起作用。 然后,您必須為每個對象使用帶有“添加”鍵的完整對象結構,正如他們所指出的,這使得嘗試從大多數不允許同一鍵多次序列化的語言中進行序列化令人沮喪。對象:
{
"commit": {},
"add": {
"doc": {
"id": "321321",
"name": "barfoo"
},
"boost": 2.0
},
"add": {
"doc": {
"id": "123123",
"name": "Foobar"
},
"boost": 1.5,
"overwrite": false
}
}
如果您使用的是 Solr 4.10 或更高版本,另一種選擇是使用自定義 JSON 結構並告訴 Solr 如何對其進行索引(也不知道如何使用此方法添加提升,但如果您已經擁有 JSON 中的數據結構,這是一個不錯的選擇)並且不想將其轉換為 Solr 的格式)。 這是有關此選項的 Solr 文檔:
更新 SOLR 8.8(可能更低)。
以下 JSON 適用於/update/json
:
{
'add': [
{'id': '123', 'field1': 'foo'},
{'id': '124', 'field1': 'foo'}
],
'delete': ['111', '106']
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.