Em um mapeamento Parent/Child, não é necessário que o documento pai tenha sido indexado primeiro para indexar o documento filho. Sendo assim é possível indexar o documento filho primeiro, antes do pai ser indexado. O único requisito é que, ao indexar o documento filho, é preciso saber o ID do documento pai de antemão.
Por exemplo, considerando um documento pai com ID 1
e documento filho com ID 2
, os seguintes comandos podem acontecer nesta exata ordem:
- Crie o index
PUT parent-child
{
"mappings": {
"doc": {
"properties": {
"name": { "type": "keyword" },
"type": {
"type": "join",
"relations": {
"parent": "child"
}
}
}
}
}
}
- Indexe primeiro o filho (com
routing
sendo o ID do pai - é preciso saber o ID do pai de antemão)
PUT /parent-child/doc/2?routing=1
{
"name": "thiago",
"type": {
"name": "child",
"parent": 1
}
}
- Indexe o pai depois (usando o mesmo ID)
PUT /parent-child/doc/1
{
"type": "parent"
}
- Verifique que o documento filho existe e que está corretamente associado ao pai procurando um documento pai com ID
1
and que tem um filho comname: "thiago"
:
GET /parent-child/_search
{
"query": {
"bool": {
"must": [
{
"ids": {
"type": "doc",
"values": [ "1" ]
}
},
{
"has_child": {
"type": "child",
"query": {
"term": { "name": "thiago" }
}
}
}
]
}
}