我有一个带日期类型属性的文档(如下所示)
{
"releaseDate": {
"time": "1990-02-01T00:00:00+0000",
}
}
我有信心做一些范围查询(日期数学等),这样如果我在1990年寻找所有的事件,我可以做以下范围查询
{
"query": {
"range": {
"releaseDate.time": {
"gte": "1990",
"lte": "1991"
}
}
}
}
我注意到弹性搜索允许在日期进行全文搜索(匹配)
匹配查询接受text / numerics / dates,分析它们并构造查询。例如: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html
但我很难理解如何进行正确的查询。
例如,如果我搜索以下匹配查询
{
"query": {
"match": {
"attribute.releaseDate.time": "1990"
}
}
}
即使日期1990-02-01T00:00:00
存在
但如果我做以下
{
"query": {
"match": {
"attribute.releaseDate.time": "1990-02"
}
}
}
我找到了我的活动。
我的理解是,对于搜索查询,ES会将我的搜索范围扩展为1990-01-01T00:00:00+0000
,与1990-02-01T00:00:00+0000
的索引值不匹配,而在第二个查询中,令牌是相同的。
这将导致我的问题:
有什么方法可以使用以下查询吗? - 事件发生在1990年,日期包含1990年(没有范围) - 事件发生在任何一年的二月 - 事件发生在任何一年的2月5日
但是我没有找到任何有效的例子(我发现的唯一一个就是https://discuss.elastic.co/t/mapping-date-field-as-multifiled-to-provide-date-query-and-full-text-search/80691)
答案 0 :(得分:0)
不幸的是,你不能这样做。如果您想按年搜索,则必须使用范围查询和rounding
例如,在您的情况下,您可以使用下一个查询:
{
"query": {
"range" : {
"age" : {
"gte" : "1990||/y",
"lte" : "1990||/y"
}
}
}
}