Elasticsearch从日期字段按年过滤

Avi*_*ash 3 elasticsearch

我有yyyy-MM-dd格式的日期字段的文档.有没有办法只根据字段的年份部分进行过滤.

例:

{'name': 'a', 'born': '1984-11-22'},
{'name': 'b', 'born': '1984-12-12'},
{'name': 'c', 'born': '1985-10-22'},
Run Code Online (Sandbox Code Playgroud)

我想做一个术语/范围过滤器来查找1984年出生的人.任何帮助都非常感谢.

Avi*_*ash 6

"query": {
        "filtered": {
           "filter": {
               "range": {
                  "born": {
                     "gte": "1984||/y",
                     "lte": "1984||/y",
                     "format": "yyyy"
                  }
               }
           }
        }
    }
Run Code Online (Sandbox Code Playgroud)

除了添加格式之外,这还需要舍入输入年份参数.如果没有按年份舍入,则范围查询无法按预期工作.尝试使用多种日期格式,如dateOptionalTime,日期等.

有关如何使用日期数学的详细信息,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html


Val*_*Val 4

是的,您可以使用range过滤器并指定年份来完成此操作format

{
    "constant_score": {
        "filter": {
            "range" : {
                "born" : {
                    "gte": "1984",
                    "lte": "1984",
                    "format": "yyyy"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)