ElasticSearch 6.7无痛,如何访问嵌套文档



当我使用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&&params.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
}
}
}
}
}
]
}
}
}

请注意,我已经使用范围查询根据您要查找的内容来评估时间。

如果以上内容没有帮助,我建议你仔细研究一下这个答案。

如果您有任何疑问,请告诉我。

最新更新