Вложенный тип в Elasticsearch: "сопоставление объектов не может быть изменено с вложенного на не вложенный" при индексировании документа
Я пытаюсь индексировать некоторые вложенные документы в Elasticsearch (v2.3.1) отображение, которое выглядит следующим образом (на основе этого примера из документации):
PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"title": { "type": "string" },
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" }
}
}
}
}
}
}
однако я не понимаю, как должны выглядеть Мои документы JSON, чтобы вписаться в это сопоставление. Я пробовал с
PUT /my_index/some_type/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}
а также с
PUT /my_index_some_type/1
{
"title": "some_title",
"comments": [
{
"name": "some_name",
"comment": "some_comment"
}
]
}
которые оба приводят к
{
"error":
{
"root_cause":
[
{
"type": "remote_transport_exception",
"reason": "[Caiman][172.18.0.4:9300][indices:data/write/index[p]]"
}
],
"type": "illegal_argument_exception",
"reason": "object mapping [comments] can't be changed from nested to non-nested"
},
"status": 400
}
правильный формат для индексации вложенных документов? Любой рабочие примеры очень ценятся, большинство примеров здесь на SO или на других страницах сосредоточены на вложенных запросах, а не на том, как документы были индексированы раньше.
1 ответов
похоже, вы действительно создаете документ типа some_type
и comments
по умолчанию будет нормальный object
(т. е. nested
), что недопустимо, так как у вас уже есть вложенный объект с именем comments
на blogpost
тип отображения в том же индексе.
попробуйте это вместо этого, и он должен работать:
PUT /my_index/blogpost/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}