เลือก nested เมื่อหลายเงื่อนไขต้องใช้กับสมาชิกเดียวกันใน array มิฉะนั้นค่าจากคนละสมาชิกอาจร่วมกันผ่าน query โดยผิดพลาด
สินค้าที่มีสองรุ่นย่อย
json
เลือก nested เมื่อหลายเงื่อนไขต้องใช้กับสมาชิกเดียวกันใน array มิฉะนั้นค่าจากคนละสมาชิกอาจร่วมกันผ่าน query โดยผิดพลาด
ไม่มีรุ่นสีแดงขนาด L แต่ object mapping ปกติทำฟิลด์เหล่านี้ให้แบนเป็นหลายสีและหลายขนาด จนสูญเสียว่าขนาดใดคู่กับสีใด ดังนั้น query สีแดงและ L อาจจับคู่สินค้าผิด
กำหนด variants เป็น nested และ color/size เป็น keyword แล้วใช้:
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
ทั้งสอง filter ทำงานใน nested element เดียว จึงไม่ตรงกับสินค้าตัวอย่าง หากเปลี่ยน L เป็น S ก็จับคู่รุ่นสีแดงได้
Nested element สร้าง internal document เพิ่มและ query แพงขึ้น Object ปกติง่ายกว่าเมื่อไม่ต้องรักษาความสัมพันธ์ใน array ทดสอบทั้งชุดที่ถูกต้องและชุดที่ข้ามสมาชิกก่อนสรุปว่า mapping ใช้งานได้
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค