配列の同じ要素に複数条件を適用する必要があるならnestedを選びます。そうしないと、別々の要素の値が誤って一緒にクエリを満たすことがあります。
2つのバリエーションを持つ商品
json
配列の同じ要素に複数条件を適用する必要があるならnestedを選びます。そうしないと、別々の要素の値が誤って一緒にクエリを満たすことがあります。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する赤のLサイズはありません。しかし通常のobject mappingはフィールドを複数の色と複数のサイズへ平坦化し、どのサイズがどの色に属するかを失います。そのためredかつLのクエリが誤って商品に一致できます。
variantsをnested、color/sizeをkeywordにマッピングし、次を使います。
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
両filterは1つのnested要素内で実行されるため、この商品は一致しません。LをSへ変えれば赤のバリエーションに一致できます。
Nested要素は追加の内部ドキュメントを作り、クエリも高コストになります。配列内の関係維持が不要なら通常のobjectが単純です。マッピングが正しいと判断する前に、正しい組み合わせと要素をまたぐ組み合わせの両方をテストします。