如何使用JSON更新Solr中的多个文档?

时间:2013-11-27 14:14:26

标签: json solr solr4

如何使用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."
      }
    ]
  }
}

5 个答案:

答案 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文档:

https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-TransformingandIndexingCustomJSON

答案 4 :(得分:0)

SOLR 8.8 更新(可能更低)。

以下 JSON 适用于 an.Id

/update/json