Filter 弹性搜索-按最新日期筛选值
在弹性搜索中,我们有一个具有不同值的文档。每个值都有一个句点。句点表示该值是否仍然是实际值,并表示该值在哪个时段是实际值 示例如下:Filter 弹性搜索-按最新日期筛选值,filter,
elasticsearch,nested-queries,Filter,
elasticsearch,Nested Queries,在弹性搜索中,我们有一个具有不同值的文档。每个值都有一个句点。句点表示该值是否仍然是实际值,并表示该值在哪个时段是实际值 示例如下: "": [ { "memberType": user, "period": { "validFrom": "1964-08-23", "validTo": "2008-12-31" }, }, { "memberType": admin, "period": { "validFrom": "2008-12-31",
"": [
{
"memberType": user,
"period": {
"validFrom": "1964-08-23",
"validTo": "2008-12-31"
},
},
{
"memberType": admin,
"period": {
"validFrom": "2008-12-31",
"validTo": null
}
}
]
在我们的查询中,我想按memberType进行筛选。但只处理最新类型的成员。因此,如果我按memberType用户筛选,则上面的文档不应匹配,因为实际的memberType是admin
在上面的示例中,我可以通过memberType和validTo字段上的missing字段使用布尔过滤器进行过滤
但是,如果此人的有效期不再有效,则两者都将定义一个validTo日期,然后我必须查看最新的日期
我怎样才能做到这一点?我想使用嵌套查询或自定义脚本过滤器。但是我不知道如何表达这个疑问
提前感谢如果此数组的字段名是memberDetails,您可以使用此查询来实现所需的功能
{
"query" : { "match_all" : {} },
"filter" : {
"nested" : {
"path" : "memberDetails",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"memberType" : "user"}
},
{
"missing" : { "field" : "validTo" }
}
]
}
}
}
}
}
谢谢Vishal。但你的答案并不完整。如果缺少validTo字段,则给出的示例仅返回。但并非所有情况下都缺少该字段,在某些情况下,validTo将有一个日期值,我需要找到最新的日期。示例:[{memberType:user,句点:{validFrom:1964-08-23,validTo:2008-12-31},},{memberType:admin,句点:{validFrom:2008-12-31,validTo:2012-04-30}]