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"
yndxlywhxy 回答:ElasticSearch 6.7轻松完成,如何访问嵌套文档

查看您的查询,您希望过滤包含carFilter.time > 1的文档以及为什么不使用简单的Nested Query

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "carFilter","query": {
              "range": {
                "carFilter.time": {
                  "gte": 1
                }
              }
            }
          }
        }
      ]
    }
  }
}

请注意,我已经使用Range Query根据您要寻找的时间来评估时间。

如果上述方法无效,建议您通过this answer

让我知道您是否有任何疑问。

本文链接:https://www.f2er.com/3162616.html

大家都在问