1
我們有父子(一對多)的彈性搜索的關係,我們要檢查它的子對象的屬性(child_attr)中有任何值的所有父對象。彈性搜索has_child查詢
我們生成JSON查詢如下:
1)對於具有值條件。
{
"has_child" : {
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"exists" : {
"field" : "child_attr"
}
}, {
"not" : {
"filter" : {
"term" : {
"child_attr" : ""
}
}
}
} ]
}
}
}
},
"type" : "child"
}
}
2)對於沒有價值的條件
{
"has_child" : {
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"or" : {
"filters" : [ {
"missing" : {
"field" : "child_attr"
}
}, {
"term" : {
"child_attr" : ""
}
} ]
}
}
}
},
"type" : "child"
}
}
這些查詢僅返回在選擇了所有子對象有一定的價值或所有子對象的父對象沒有價值的搜索屬性。
它不會返回任何部分滿足大部分數據的條件。
我也玩弄關鍵字分析器來索引這個child_attribute,但沒有喜悅。
期待您的專家建議。
我更新了我的同步代碼以使存在和缺少過濾器工作。謝謝:) – anks2089
嘿是否有可能得到兒童字段中有子查詢? – Dragonborn