여러 조건이 배열의 같은 원소에 적용되어야 할 때 nested를 선택합니다. 그렇지 않으면 다른 원소의 값들이 함께 쿼리를 잘못 만족할 수 있습니다.
두 변형을 가진 상품
json
여러 조건이 배열의 같은 원소에 적용되어야 할 때 nested를 선택합니다. 그렇지 않으면 다른 원소의 값들이 함께 쿼리를 잘못 만족할 수 있습니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기빨간색 L 사이즈 변형은 없습니다. 하지만 일반 object 매핑은 필드를 여러 색상과 여러 크기로 평탄화하여 크기와 색상의 관계를 잃습니다. 따라서 red와 L 쿼리가 상품을 잘못 일치시킬 수 있습니다.
variants를 nested, color/size를 keyword로 매핑하고 다음을 사용합니다.
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
두 filter가 이제 하나의 nested 원소 안에서 실행되므로 예제 상품은 일치하지 않습니다. L을 S로 바꾸면 빨간색 변형과 일치할 수 있습니다.
Nested 원소는 추가 내부 문서를 만들고 쿼리 비용도 높입니다. 배열 내부 관계를 보존할 필요가 없다면 일반 object가 단순합니다. 매핑이 맞다고 결론 내리기 전에 유효한 조합과 원소를 넘나드는 조합을 모두 테스트합니다.