定义的 script_fields
可以在其他地方使用吗? 如何使用?
比如:
"script_fields" : {
"test1" : {
"script" : {
"lang": "painless",
"source": "doc['price'].value * 2"
}
},
"test2" : {
"script" : {
"lang": "painless",
"source": "<此处可以使用上面定义的`test1`进行计算吗?>"
}
}
}
目前 ES 版本 7.4;
1
airfling 2019-10-21 11:00:05 +08:00
script_field 这个只是针对某个索引或者某个 template 的吧
|
2
Memento OP @airfling 那 ES 有办法自定义变量, 然后重用于其他地方, 比如过滤或者其他变量的计算? `Solr` 中可以通过 `set(param, script)`, 然后其他地方可以通过 `$param` 获取该变量处理;
|
3
airfling 2019-10-21 11:41:06 +08:00
@Memento 似乎没有,es 对外开放的其实是接口,对索引和 templte 的配置,script_field 也算配置是保存在另外一个索引里的,你可以找下 es 是否支持自定义聚合,如果支持的话你用自定义聚合应该可以
|
4
Memento OP @airfling 这跟聚合不一样吧, 需求是需要自定生成一个变量 A, 并且这个变量 A 参与到评分`boost`排序`sort`, 还有其他变量的计算, 如果不重用的话, 这些地方都需要计算一遍生成 A 的脚本.
|
5
airfling 2019-10-21 13:37:46 +08:00 1
@Memento https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-using.html 我刚看了这个文档,你可以用这个高级语法 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-engine.html ,自已自定义一个。你也可以自己试下可不可以像 agg 那样进行嵌套,如果不能嵌套就自己用后面的高级语法自己定义一个
|