问题类似于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"
        }
      }
    }
  }
}

最佳答案

您快要准备好了,您需要这样做:

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

更新

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

关于elasticsearch - 像SQL DATEPART函数一样,Elasticsearch过滤日期的一部分,忽略年份,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34206629/

10-12 12:47
查看更多