Выбирайте nested, если несколько условий должны применяться к одному элементу массива. Иначе значения разных элементов могут случайно удовлетворить запрос вместе.
Товар с двумя вариантами
Красного варианта размера L нет. Но обычный object mapping расплющивает поля в несколько цветов и размеров, теряя связь между ними. Поэтому запрос красного цвета и L может ошибочно найти товар.
Задайте variants как nested, а color/size как keyword. Затем используйте:
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
Оба фильтра теперь работают внутри одного nested-элемента, поэтому примерный товар не совпадёт. Замените L на S, и красный вариант сможет совпасть.
Nested-элементы создают дополнительные внутренние документы и более дорогие запросы. Обычный object проще, если связи внутри массивов сохранять не требуется. Проверьте корректные и межэлементные сочетания, прежде чем считать mapping рабочим.
Библиотека вопросов для IT-собеседований с подробными ответами — от Junior до Senior.
Поддержать