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
如何实现此查询。不得在字段中添加任何数据类型
答案 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"
}
}
}
}
}