Chọn nested khi nhiều điều kiện phải áp dụng lên cùng phần tử trong mảng. Nếu không, các giá trị từ những phần tử khác nhau có thể vô tình cùng thỏa truy vấn.
Một sản phẩm có hai biến thể
Không có biến thể đỏ cỡ L. Nhưng mapping object thông thường làm phẳng các trường thành nhiều màu và nhiều cỡ, mất quan hệ cỡ nào thuộc màu nào. Vì thế truy vấn đỏ và L có thể khớp sai sản phẩm.
Khai báo variants là nested và color/size là keyword. Sau đó dùng:
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
Cả hai filter lúc này chạy bên trong cùng một phần tử nested, nên sản phẩm ví dụ không khớp. Đổi L thành S thì có thể khớp biến thể đỏ.
Phần tử nested tạo thêm document nội bộ và truy vấn tốn kém hơn. Object thông thường đơn giản hơn khi không cần giữ quan hệ trong mảng. Thử cả tổ hợp hợp lệ lẫn tổ hợp ghép chéo phần tử trước khi kết luận mapping hoạt động đúng.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ