Elasticsearch过滤部分日期忽略像SQL DATEPART函数之类的年份

时间:2015-12-10 16:12:29

标签: elasticsearch

问题类似于Elasticsearch filtering by part of date

我有一个文件有一个字段映射就像:

"ActivityDate": {
                  "type": "date",
                  "ignore_malformed": true,
                  "format": "yyyy-MM-dd HH:mm:ss.SSS"
               }

我试图让所有发生在12月9日的ActivityDate,无论多年。 我正在尝试各种方式的脚本过滤器,如:

{
  "query":{
    "filtered":{
      "filter":{
        "script":{
          "script":" doc['ActivityDate'].value.getMonth() == 12" ,
          "lang":"expression"
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

你几乎就在那里,你需要这样做:

{
  "query":{
    "filtered":{
      "filter":{
        "script":{
          "script": "doc.ActivityDate.date.getMonthOfYear() == 12 && doc.ActivityDate.date.getDayOfMonth() == 9"
        }
      }
    }
  }
}

<强>更新

根据我们在评论中的讨论,我唯一能想到的是因为ignore_malformed属性是真的。某些日期可能不符合您已配置的模式,因此不是Date个对象,而是String个。这是唯一可以解释你所得到的错误的东西。