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:


注: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非常缓慢。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值