弹性搜索日期的确切范围

时间:2016-04-14 19:03:20

标签: elasticsearch

尝试使用范围查询进行'完全'日期匹配,但没有成功。 我有agreement_start_date字段,下面有映射

"agreement_start_date" : {
     "type" : "date",
     "format" : "strict_date_optional_time||epoch_millis"
} 

我索引了单个文档,似乎索引很好。

curl "localhost:9200/cr/_search?pretty=true" -d ''

{
  "took" : 35,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "cr",
      "_type" : "agreement_index",
      "_id" : "570fe59b7f9e6f7f762129ed",
      "_score" : 1.0,
      "_source":{"agreement_start_date": "2016-04-14T18:46:51.268176+00:00"} 
  }
}

我希望使用与agreement_start_date匹配的简单查询来获取此记录。

{
  "query": {
    "bool": {
      "must": {
        "range": {
          "agreement_start_date": {
            "gte": "2016-04-14",
            "lte": "2016-04-14",
            "format": "yyyy-MM-dd"
          }
        }
      }
    }
  }
}

此查询返回0结果。如何在弹性搜索中进行查询,只比较提供的日期部分?

2 个答案:

答案 0 :(得分:0)

似乎将舍入日期改为最近的一天。

{
  "query": {
    "bool": {
      "must": {
        "range": {
          "agreement_start_date": {
            "gte": "2016-04-14||\d",
            "lte": "2016-04-14||\d",
            "format": "yyyy-MM-dd"
          }
        }
      }
    }
  }
}

此查询返回索引文档。

答案 1 :(得分:0)

我用过这个:

"range" : {
    "agreement_start_date" : {
        "gte": "2016-04-14",
        "lte": "2016-04-14",
        "format": "yyyy-MM-dd||yyyy-MM-dd",
        "time_zone": "Asia/Seoul"
    }
}