首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索: hour_minute_second映射返回空数据

弹性搜索: hour_minute_second映射返回空数据
EN

Stack Overflow用户
提问于 2020-04-03 13:03:30
回答 1查看 201关注 0票数 1

下面是我为搜索字段创建的映射

代码语言:javascript
复制
PUT /sample/_mapping
{
  "properties": {
    "webDateTime1": {
      "type":   "date",
      "format": "dd-MM-yyyy HH:mm:ss||dd-MM-yyyy||hour_minute_second"
    }
  }
}

如果我根据"04-04-2019 20:17:18“进行搜索,如果我根据”04-04-2019年“进行搜索,得到正确的数据,如果我根据"20:17:18”进行搜索,不知道总是得到空的结果。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 13:33:41

当你摄入一些样本文档时:

代码语言:javascript
复制
POST sample/_doc/1
{"webDateTime1":"04-04-2019 20:17:18"}

POST sample/_doc/2
{"webDateTime1":"04-04-2019"}

POST sample/_doc/3
{"webDateTime1":"20:17:18"}

然后在日期字段上进行聚合,

代码语言:javascript
复制
GET sample/_search
{
  "size": 0, 
  "aggs": {
    "dt_values": {
      "terms": {
        "field": "webDateTime1"
      }
    }
  }
}

您将看到这些值实际上是如何被索引的:

代码语言:javascript
复制
...
"buckets" : [
        {
          "key" : 73038000,
          "key_as_string" : "01-01-1970 20:17:18",
          "doc_count" : 1
        },
        {
          "key" : 1554336000000,
          "key_as_string" : "04-04-2019 00:00:00",
          "doc_count" : 1
        },
        {
          "key" : 1554409038000,
          "key_as_string" : "04-04-2019 20:17:18",
          "doc_count" : 1
        }
      ]
...

这就是为什么您对20:17:18的查询会让您头疼。

现在,您通常希望像这样使用range查询:

代码语言:javascript
复制
GET sample/_search
{
  "query": {
    "range": {
      "webDateTime1": {
        "gte": "20:17:18",
        "lte": "20:17:18",
        "format": "HH:mm:ss"
      }
    }
  }
}

注意format参数。但是,如果您没有在您的date字段中提供一个datetime,那么它将以unix时代为日期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61012547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档