J'essaie d'indexer certains documents imbriqués dans un mappage Elasticsearch (v2.3.1) qui ressemble à ceci (basé sur cet exemple de la documentation) :
PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"title": { "type": "string" },
"comments": {
"type": "nested",
"properties": {
"name": { "type": "string" },
"comment": { "type": "string" }
}
}
}
}
}
}
Cependant, je ne comprends pas à quoi doivent ressembler mes documents JSON pour s'intégrer dans ce mappage. J'ai essayé avec
PUT /my_index/some_type/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}
ainsi qu'avec
PUT /my_index_some_type/1
{
"title": "some_title",
"comments": [
{
"name": "some_name",
"comment": "some_comment"
}
]
}
qui se traduisent tous deux par
{
"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
}
Quel est le format correct pour indexer les documents imbriqués? Tous les exemples de travail sont très appréciés, la plupart des exemples ici à SO ou sur d'autres pages se concentrent sur les requêtes imbriquées plutôt que sur la façon dont les documents ont été indexés auparavant.
Il semble que vous créez vraiment un document de type some_type
et comments
prendront par défaut un object
normal (c'est-à-dire pas nested
), ce qui n'est pas autorisé car vous avez déjà un objet imbriqué appelé comments
dans le type de mappage blogpost
dans le même index.
Essayez ceci à la place et cela devrait fonctionner:
PUT /my_index/blogpost/1
{
"title": "some_title",
"comments": {
"name": "some_name",
"comment": "some_comment"
}
}