Elasticsearch轻松查询以将日期字段值与用户输入日期值进行比较

时间:2019-04-03 05:39:56

标签: elasticsearch elastic-stack

日期类型的

ES索引字段如下

“ docdate”:{             “ type”:“ date”,             “字段”:{               “文字”:{                 “ type”:“ text”,                 “ analyzer”:“自动完成”               }             }           }

查询应使用通过查询传递的用户输入参数值来检查docdate值,如下所示。

                "script": {
                    "script": {
                        "source": "def effecDate=doc['docdate'].value; def sf = new SimpleDateFormat('yyyy-MM-dd'); (sf.parse(params.userdate).after(sf.parse(effecDate)) || (sf.parse(params.userdate) == sf.parse(effecDate)) ",
                        "lang": "painless",
                        "params": {
                            "userdate": "2020-12-01"
                        }
                    }
                }

低于投放错误。

class_cast_exception:无法将org.elasticsearch.script.JodaCompatibleZonedDateTime转换为java.lang.String

如何实现此查询。不得在字段中添加任何数据类型

1 个答案:

答案 0 :(得分:1)

您可以这样做:

{
  "query": {
    "script": {
      "script": {
        "source": """
           def effecDate = doc['effdate'].value.toInstant(); 
           def pickupDate = Instant.parse(params.pickUpDate + 'T00:00:00Z');
           return ChronoUnit.DAYS.between(effecDate, pickupDate) >= 0;
        """,
        "lang": "painless",
        "params": {
          "pickUpDate": "2019-03-01"
        }
      }
    }
  }
}