弹性搜索 - 按最新日期过滤值

时间:2015-01-30 06:55:26

标签: filter elasticsearch nested-queries

在弹性搜索中,我们有一个具有不同值的文档。每个值都有一个句点。一个句点告诉该值是否仍然是实际值,并告诉该值是实际值的时间段。

示例:

"": [
{
  "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字段上的缺少字段进行过滤。

但是如果这个人根本没有更长的时间,两者都会定义一个有效的日期,那么我必须查看最新的日期。

我怎样才能实现这一目标?我正在考虑嵌套查询或自定义脚本过滤器。但我不知道如何表达查询。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果此数组的字段名称是 memberDetails ,则可以使用此查询来实现所需。

{
    "query" : { "match_all" : {} },
    "filter" : {
        "nested" : {
            "path" : "memberDetails",
            "filter" : {
                "bool" : {
                    "must" : [
                        {
                            "term" : {"memberType" : "user"}
                        },
                        {
                            "missing" : { "field" : "validTo" }
                        }
                    ]
                }
            }
        }
    }
}