Escolha nested quando várias condições precisam se aplicar ao mesmo elemento de um array. Caso contrário, valores de elementos diferentes podem satisfazer a consulta juntos por acidente.
Um produto com duas variantes
Não há variante vermelha tamanho L. Porém, o mapping object comum achata esses campos em várias cores e tamanhos, perdendo a relação entre eles. Uma consulta por vermelho e L pode, portanto, corresponder incorretamente ao produto.
Mapeie variants como nested e color/size como keyword. Depois use:
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
Os dois filtros agora rodam dentro de um único elemento nested, então o produto de exemplo não corresponde. Troque L por S e ele poderá corresponder à variante vermelha.
Elementos nested criam documentos internos adicionais e consultas mais caras. Object comum é mais simples quando não é necessário preservar relações dentro de arrays. Teste combinações válidas e combinações entre elementos antes de decidir que o mapping funciona.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar