我的文档的日期字段格式为yyyy-MM-dd。有没有办法只根据该领域的年份部分进行过滤。
示例:
{'name': 'a', 'born': '1984-11-22'},
{'name': 'b', 'born': '1984-12-12'},
{'name': 'c', 'born': '1985-10-22'},
我想做一个术语/范围过滤器来查找1984年出生的人。 任何帮助都非常感谢。
答案 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"
}
}
}
}