当我使用ES 5.5更新到6.7时。无痛脚本不起作用
这是5.5如果我想获得嵌套文档[transFilter]我做这个
params['_source’]['carFilter’]
它工作得很好
但是
当我使用6.7版本时
params['_source']['carFilter']
我发现它不起作用
所有参数["_source"]均为空
我的映射
carFilter": {
"type": "nested",
"properties": {
"time": {
"type": "long"
}
}
}
我的数据示例
"carFilter" : [
{
"time" : 20200120
},
{
"time" : 20200121
}
]
以及我的查询脚本示例
{
"query" : {
"bool" : {
"must" : [
{
"script" : {
"script" : {
"inline" : "if(params['_source']!=null){
if(params['_source']['carFilter']!=null){
for(def item:params['_source']['carFilter'] ){
if (item.time>1) { return true; }
}
}
}
return false;",
"lang" : "painless",
"params" : {
"rentTime" : 1000
}
}
}
}
]
}
}
}
甚至没有错误但事实
if(params['_source']!=null){
这条线路已经返回
上面简单的无痛只是为了说明问题,下面附上一个相对真实的问题。
double carPrice=0.00;if(!params['_source'].empty){"+
" def days=params['_source']['everyDayPrice'];if(params['_source']['everyDayPrice']!=null){int size=days.length;" +
" if(size>0){for(int i=0;i<size;i++){String day = days[i]['day'];Double price = days[i]['price'];"+
" if(price!=null&¶ms.get(day)!=null){carPrice=carPrice+params.get(day)*price;}}}}}" +
" return carPrice/params.total"
查看您的查询,您可能希望筛选具有carFilter.time > 1
的文档,为什么不使用简单的嵌套查询:
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "carFilter",
"query": {
"range": {
"carFilter.time": {
"gte": 1
}
}
}
}
}
]
}
}
}
请注意,我已经使用范围查询根据您要查找的内容来评估时间。
如果以上内容没有帮助,我建议你仔细研究一下这个答案。
如果您有任何疑问,请告诉我。