ElasticSearch5.X script_fields 解释及例子

前言:es6.X 有所改变 本例子只测试了 5.X,但是道理嘛 都一样。看下6.X的文档再看一下本文就懂了。

DSL1:

#直接用文档的某个字段做计算
GET /quality_control/my_type/_search
{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "test1": {
      "script": {
        "lang": "painless",
        "inline": "doc['qce_id'].value * 2"
      }
    }
  }
}

result:



DSL2:

#自定义参数 params 可以和文档中某个字段 做计算
GET /quality_control/my_type/_search
{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "test2": {
      "script": {
        "lang": "painless",
        "inline": "doc['qce_id'].value / params.factor * params.yb",
        "params": {
          "factor": 2.222,
          "yb": 51
        }
      }
    }
  }
}

result:



DSL3:

#可以获取文档中的某个字段的值
GET /quality_control/my_type/_search
{
  "query": {
    "match_all": {}
  },
  "script_fields": {
    "test1": {
      "script": "params['_source']['qc_content']"
    }
  }
}

result:


扫描二维码关注公众号,回复: 234955 查看本文章
注:DSL3 和 下面这个Doc value Fields例子 很像:
GET /quality_control/my_type/_search
{
    "query" : {
        "match_all": {}
    },
    "docvalue_fields" : ["qc_type", "qc_content"]
}

result:



doc['my_field'].value和params['_source']['my_field']的区别:

理解之间的区别是很重要的 doc['my_field'].value和params['_source']['my_field']。首先,使用doc关键字,将导致该字段的条件被加载到内存(缓存),这将导致更快的执行,但更多的内存消耗。此外,doc[...]符号只允许简单的有价值的领域(不能从它返回一个JSON对象),只有在非分析或单个词条的基础上有意义。但是,doc如果可能,使用仍然是从文档访问值的推荐方式,因为_source每次使用时都必须加载并解析。使用_source非常缓慢。


猜你喜欢

转载自blog.csdn.net/dpnice/article/details/80237462