ElasticSearch3-painless脚本应用进行range过滤和排序

版权声明:fromZjy QQ1045152332 https://blog.csdn.net/qq_36762677/article/details/88891153

感谢:
https://blog.csdn.net/u012270682/article/details/80165836
查询空字段参考
https://blog.csdn.net/zhang862520682/article/details/80333196

过滤

需求: 如果aaa字段不存在,则使用bbb字段
aaa<=结果<=bbbb

{
  "from": 0, 
  "size": 10, 
  "query": {
    "bool": {
      "filter": [
        {
          {
          "script" : {       通过脚本过滤
            "script" : {
              "inline" : "if(doc['aaa'].empty==true){if(doc['bbbbb'].value>=97.0){return doc['bbbbb'].value;}}else{if(doc['aaa'].value>=97.0){return doc['aaa'].value;}}",
              "lang" : "painless"
            },
            "boost" : 1.0
          }
        },
        {
          "script" : {
            "script" : {
              "inline" : "if(doc['aaa'].empty==true){if(doc['qc_score'].value<=99.0){return doc['bbbbb'].value;}}else{if(doc['aaa'].value<=99.0){return doc['aaa'].value;}}",
              "lang" : "painless"
            },
            "boost" : 1.0
          }
        }, 
            "boost": 1
          }
        }, 
        {
          "range": {    普通range过滤
            "bbbbb": {
              "from": 1, 
              "to": 100, 
              "include_lower": true, 
              "include_upper": true, 
              "boost": 1
            }
          }
        }
      ], 
      "disable_coord": false, 
      "adjust_pure_negative": true, 
      "boost": 1
    }
  }, 
  "ext": { }
}

java代码

Script script =new Script("if(doc['qc_review_score'].empty==true){" +
              "if(doc['qc_score'].value<="+getScoreMax()+"){" +
              "return doc['qc_score'].value;}" +
              "}else{" +
            "if(doc['qc_review_score'].value<="+getScoreMax()+"){"+
            "return doc['qc_review_score'].value;}" +
            "}");//脚本文件名称,脚本类型

//创建scriptquery
ScriptQueryBuilder filterBuilder = QueryBuilders.scriptQuery(script);
parentQuery.filter(filterBuilder);

排序

{
  "sort": [
    {
      "_script": {
        "script": {
          "inline": "doc['qc_review_score'].empty==true? doc['qc_score'].value:doc['qc_review_score'].value", 
          "lang": "painless"
        }, 
        "type": "number", 
        "order": "asc"
      }
    }, 
    {
      "unique_id": {
        "order": "desc"
      }
    }
  ], 
  "ext": { }
}

java代码

Script script = new Script("doc['qc_review_score'].empty==true? doc['qc_score'].value:doc['qc_review_score'].value");
sortBuilder = SortBuilders.scriptSort(script,ScriptSortBuilder.ScriptSortType.NUMBER).order(orderType==0?SortOrder.ASC:SortOrder.DESC);
searchSourceBuilder.sort(sortBuilder);

猜你喜欢

转载自blog.csdn.net/qq_36762677/article/details/88891153