Elasticsearch从日期字段按年过滤

时间:2015-08-06 16:45:07

标签: elasticsearch

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

示例:

{'name': 'a', 'born': '1984-11-22'},
{'name': 'b', 'born': '1984-12-12'},
{'name': 'c', 'born': '1985-10-22'},

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

3 个答案:

答案 0 :(得分:5)

"query": {
        "filtered": {
           "filter": {
               "range": {
                  "born": {
                     "gte": "1984||/y",
                     "lte": "1984||/y",
                     "format": "yyyy"
                  }
               }
           }
        }
    }

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

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

答案 1 :(得分:2)

是的,您可以使用range filter并指定年份format来执行此操作:

{
    "constant_score": {
        "filter": {
            "range" : {
                "born" : {
                    "gte": "1984",
                    "lte": "1984",
                    "format": "yyyy"
                }
            }
        }
    }
}

答案 2 :(得分:-1)

根据文档,解决方案将是:

GET _search
{
    "query": {
        "range" : {
            "born" : {
                "gte": "1984",
                "lt": "1985",
                "format": "yyyy"
            }
        }
    }
}