我们在弹性搜索中有一个父子(一对多)关系,我们想要检查所有父对象的子对象属性(child_attr)在其中有任何值。
我们正在生成 json 查询,如下所示:
1) 对于有值条件。
{
"has_child" : {
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"exists" : {
"field" : "child_attr"
}
}, {
"not" : {
"filter" : {
"term" : {
"child_attr" : ""
}
}
}
} ]
}
}
}
},
"type" : "child"
}
}
2) For 无值条件
{
"has_child" : {
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"or" : {
"filters" : [ {
"missing" : {
"field" : "child_attr"
}
}, {
"term" : {
"child_attr" : ""
}
} ]
}
}
}
},
"type" : "child"
}
}
这些查询仅返回所有子对象都具有某些值或所有子对象都没有搜索属性值的父对象。
它不会返回部分满足此条件的任何内容,该条件涵盖了大部分数据。
我还玩弄了关键字分析器来索引这个 child_attribute 但没有乐趣。
期待您的专家建议。