我希望从弹性搜索的日期开始。我的映射就像 -
"timeModified":
{
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
我在弹性搜索中的数据存储是 -
"timeModified": "2015-03-12T13:18:50.000+05:30"
我想从约会开始获得年份。当我执行以下查询时 -
{
"query" : {
"match_all": {}
},
"script_fields" : {
"left_field" : {
"script" : {
"inline": "doc.timeModified.value.substring(0, length)",
"params": {
"length": 4
}
}
}
}
}
它给我例外 -
“没有方法签名:java.lang.Long.substring()适用 对于参数类型:(java.lang.Integer,java.lang.Integer)值:[0, 4] \ n可能的解决方案:toString(),toString(),toString(), toString(long,int)“
如果我可以选择将字段值日期转换为字符串而不更改我的实际映射类型,则会得到正确的值。因此,请建议如何在弹性搜索查询中转换字符串。 或者,如果有任何其他选择从年初获得年份,那么也建议。
答案 0 :(得分:2)
您获得的错误是因为字段值为Long
而不是String
。但是,您也可以通过以下方式直接访问date
值:
{
"query" : {
"match_all": {}
},
"script_fields" : {
"left_field" : {
"script" : {
"inline": "doc.timeModified.date.getYear()"
}
}
}
}
答案 1 :(得分:1)
脚本就像doc['timeModified'].date.year
一样简单。知道该字段属于date
类型,ES会公开.date
快捷方式,可以使用.year
之类的内容。