Elasticsearch 日期字段词条查询

问题描述 投票:0回答:1

鉴于

some_date
字段在映射中定义为
date
,如果我想将文档与确切的日期进行匹配,建议的方法是使用带有
range
lte
gte
查询。

{
    "range" : {
        "some_date" : {
            "gte": "2020-01-01",
            "lte": "2020-01-01",
            "format": "yyyy-MM-dd"
         }
     }
}

但是,它似乎也适用于正常的

term
查询

"term" : {
    "some_date" : {
        "value" : "2020-01-01"
    }
}

上面的查询工作正常并返回预期结果。但是,没有关于此的明确文件。关于

term
查询 的 Elasticsearch 文档根本没有提及日期。

它建议不要对

term
字段使用
text
查询,但没有说明
term
查询是否可用于日期、数字、布尔值等内容 - 然而一切似乎都有效。

我的问题是:我们是否应该依赖日期字段在

term
查询中按预期运行的事实,或者,我们是否应该始终使用
range
查询。

请注意,

range
是一种术语级别查询。短语“术语级查询”定义了一组查询。
term
terms
range
等都是“term level queies”。

elasticsearch
1个回答
0
投票

对日期字段的

term
查询实际实现为过滤全天的
range
查询(请参阅此问题),即

{
  "term": {
     "date": "2015-12-12"
  }
}

相当于

{
  "range": {
     "date": {
        "gte": "2015-12-12T00:00:00Z",
        "lte": "2015-12-13T23:59:59Z"
  }
}

因此,如果您使用

term
查询,则需要一个额外的(日期)解析和(术语到范围)翻译步骤,因此直接使用范围查询更为“最佳”。

© www.soinside.com 2019 - 2024. All rights reserved.