如何使用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."
}
]
}
}
答案 0 :(得分:5)
Solr期望在每个文档的JSON结构中有一个“添加”键(如果您考虑对象中键的原始含义,这可能看起来很奇怪),因为它在执行时直接映射到XML格式索引 - 这样你就可以自己拥有每个文档的元数据。
{
"commit": {},
"add": {
"doc": {
"id": "321321",
"name": "barfoo"
}
},
"add": {
"doc": {
"id": "123123",
"name": "Foobar"
}
}
}
..有效。我认为允许数组作为“add”引用的元素会更有意义,但我还没有深入挖掘源代码或知道背后的原因。
答案 1 :(得分:5)
我理解(至少)从版本4.0及更早版本的solr,这已得到修复。请看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,但从数据结构中进行序列化并不容易。这个是。
答案 2 :(得分:1)
elachell是正确的,如果您只是使用默认设置添加文档,则数组格式将起作用。不幸的是,如果您需要为某些文档添加自定义提升或更改覆盖设置,那么这将无效。然后,您必须使用完整的对象结构,并为每个对象添加一个“添加”键,正如他们所指出的那样,尝试从大多数语言中序列化这令人沮丧,这些语言不允许在同一个键中多次使用相同的键。对象:
{
"commit": {},
"add": {
"doc": {
"id": "321321",
"name": "barfoo"
},
"boost": 2.0
},
"add": {
"doc": {
"id": "123123",
"name": "Foobar"
},
"boost": 1.5,
"overwrite": false
}
}
答案 3 :(得分:0)
如果您使用的是Solr 4.10或更高版本,则另一个选择是使用自定义JSON结构并告诉Solr如何对其进行索引(不知道如何使用此方法添加提升,但如果您已经使用它,那么这是一个不错的选择有一个JSON数据结构,不想将其转换为Solr的格式)。这是关于此选项的Solr文档:
答案 4 :(得分:0)
SOLR 8.8 更新(可能更低)。
以下 JSON 适用于 an.Id
:
/update/json