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