ElasticSearch5.X script_fields 解释及例子
程序员文章站
2022-04-18 12:48:09
...
前言: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非常缓慢。
上一篇: script标签的位置
下一篇: R语言——方差分析