Elastic Searchには親子(1対多)の関係があり、子オブジェクト属性(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)値のない条件の場合
{
"has_child" : {
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"or" : {
"filters" : [ {
"missing" : {
"field" : "child_attr"
}
}, {
"term" : {
"child_attr" : ""
}
} ]
}
}
}
},
"type" : "child"
}
}
これらのクエリは、すべての子オブジェクトに何らかの値があるか、すべての子オブジェクトに検索された属性の値がない親オブジェクトのみを返します。
データの大部分をカバーするこの条件が部分的に満たされている場合は、何も返されません。
また、このchild_attributeにインデックスを付けるために、キーワードアナライザーをいじってみましたが、喜びはありません。
専門家の提案をお待ちしております。