Как обновить несколько документов в Solr с помощью JSON?
Как обновить несколько документов в Solr 4.5.1 с помощью JSON? Я пробовал это, но это не работает:
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."
}
]
}
}
4 ответов
Solr ожидает один"добавить" -ключ в JSON-структуре для каждого документа (что может показаться странным, если вы думаете об исходном значении ключа в объекте), поскольку он напрямую сопоставляется с форматом XML при индексировании - и таким образом вы можете иметь метаданные для каждого документа самостоятельно.
{
"commit": {},
"add": {
"doc": {
"id": "321321",
"name": "barfoo"
}
},
"add": {
"doc": {
"id": "123123",
"name": "Foobar"
}
}
}
.. завод. Я думаю, что разрешение массива в качестве элемента, на который ссылается "add", имело бы больше смысла, но я не копал дальше в источник или не знаю, почему этот.
Я понимаю, что (по крайней мере) из версий 4.0 и старше solr это было исправлено. Посмотрите наhttp://wiki.apache.org/solr/UpdateJSON.
In ./exampledocs/книги.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 по этому параметру: