在弹性搜索中,我们有一个具有不同值的文档。每个值都有一个句点。一个句点告诉该值是否仍然是实际值,并告诉该值是实际值的时间段。
示例:
"": [
{
"memberType": user,
"period": {
"validFrom": "1964-08-23",
"validTo": "2008-12-31"
},
},
{
"memberType": admin,
"period": {
"validFrom": "2008-12-31",
"validTo": null
}
}
]
在我们的查询中,我想按memberType进行过滤。但只处理最新类型的成员。因此,如果我按memberType" user"进行过滤,则上述文档不应匹配,因为实际的memberType是admin。
在上面的示例中,我可以使用memberType的布尔过滤器和validTo字段上的缺少字段进行过滤。
但是如果这个人根本没有更长的时间,两者都会定义一个有效的日期,那么我必须查看最新的日期。
我怎样才能实现这一目标?我正在考虑嵌套查询或自定义脚本过滤器。但我不知道如何表达查询。
提前致谢
答案 0 :(得分:0)
如果此数组的字段名称是 memberDetails ,则可以使用此查询来实现所需。
{
"query" : { "match_all" : {} },
"filter" : {
"nested" : {
"path" : "memberDetails",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"memberType" : "user"}
},
{
"missing" : { "field" : "validTo" }
}
]
}
}
}
}
}