无论多年在弹性搜索中获取文档

时间:2017-06-15 13:45:29

标签: elasticsearch

我想在12月8日获得所有文件,不论年限如何。我已经尝试了两个查询,但都失败了,有没有办法计算这个?

第一次查询
GET /my_index/my_type/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "range": {
                  "myDate": {
                     "gte": "12-08",
                     "lte": "12-08",
                     "format": "MM-dd"
                  }
               }
            }
         ]
      }
   }
}
第二个查询
GET /my_index/my_type/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "match": {
                  "mydate": "12-08"
                  }               
            }
         ]
      }
   }
}

1 个答案:

答案 0 :(得分:1)

不幸的是,我认为这很容易实现。 DateTime数据类型实际上只是长数字。范围查询还将定义的输入转换为数字。示例:now - > 1497541939892.有关详细信息,请参阅documentation - 具体如下:

  

在内部,日期转换为UTC(如果指定了时区)并存储为一个长数字,表示自此纪元以来的毫秒数。

考虑到这一点,您必须为每个子查询减去1(或x)年(以毫秒为单位)。这听起来不切实际。

我认为你最好的选择是,将日期和月份 - 也许是年份 - 另外编入索引。然后,您将能够按月/日查询,这将是整数值。我不知道你的案子是否容易做到,但我现在真的没有其他想法。