问题也许有人有解决方案如何按月或按天过滤/查询ElasticSearch数据?假设我需要获得今天庆祝生日的所有用户.
制图
mappings:
dob: { type: date, format: "dd-MM-yyyy HH:mm:ss||yyyy-MM-dd'T'HH:mm:ss'Z'||yyyy-MM-dd'T'HH:mm:ss+SSSS"}
Run Code Online (Sandbox Code Playgroud)
并以这种方式存储:
dob: 1950-06-03T00:00:00Z
主要问题是如何按月和日搜索用户.忽略这一年,因为生日是我们所知道的每年.
解决方案 我找到了使用通配符查询生日的解决方案.我们知道如果我们想要使用通配符,则字段的映射必须是字符串,因此我使用了多字段映射.
mappings:
dob:
type: multi_field
fields:
dob: { type: date, format: "yyyy-MM-dd'T'HH:mm:ss'Z'}
string: { type: string, index: not_analyzed }
Run Code Online (Sandbox Code Playgroud)
和查询仅按月和日获取用户是:
{
"query": {
"wildcard": {
"dob.string": "*-06-03*"
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意 此查询可能很慢,因为它需要迭代多个术语.
结论 这不是很好的方式,但它是我发现的唯一一个,它的工作原理!
根据您的问题,我假设您想要一个查询,而不是一个过滤器(它们是不同的),您可以将日期数学/格式与范围查询结合使用。
请参阅:范围查询的用法
有关日期数学的解释,请参阅以下链接
curl -XPOST http://localhost:9200/twitter/tweet/_search -d
{
"query": {
"range": {
"birthday": {
"gte" : "2014-01-01",
"lte" : "2014-01-01"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经用最新的弹性搜索对此进行了测试。
| 归档时间: |
|
| 查看次数: |
6457 次 |
| 最近记录: |