Elasticsearch script_fields 的重用问题

2019-10-21 10:53:07 +08:00
 Memento

定义的 script_fields 可以在其他地方使用吗? 如何使用? 比如:

"script_fields" : {
        "test1" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value * 2"
            }
        },
        "test2" : {
            "script" : {
                "lang": "painless",
                "source": "<此处可以使用上面定义的`test1`进行计算吗?>"
            }
        }
    }

目前 ES 版本 7.4;

4108 次点击
所在节点    Elasticsearch
6 条回复
airfling
2019-10-21 11:00:05 +08:00
script_field 这个只是针对某个索引或者某个 template 的吧
Memento
2019-10-21 11:34:49 +08:00
@airfling 那 ES 有办法自定义变量, 然后重用于其他地方, 比如过滤或者其他变量的计算? `Solr` 中可以通过 `set(param, script)`, 然后其他地方可以通过 `$param` 获取该变量处理;
airfling
2019-10-21 11:41:06 +08:00
@Memento 似乎没有,es 对外开放的其实是接口,对索引和 templte 的配置,script_field 也算配置是保存在另外一个索引里的,你可以找下 es 是否支持自定义聚合,如果支持的话你用自定义聚合应该可以
Memento
2019-10-21 11:55:07 +08:00
@airfling 这跟聚合不一样吧, 需求是需要自定生成一个变量 A, 并且这个变量 A 参与到评分`boost`排序`sort`, 还有其他变量的计算, 如果不重用的话, 这些地方都需要计算一遍生成 A 的脚本.
airfling
2019-10-21 13:37:46 +08:00
@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 那样进行嵌套,如果不能嵌套就自己用后面的高级语法自己定义一个
Memento
2019-10-21 14:23:42 +08:00
@airfling 嵌套我试了一下, 貌似不行, 文档中也没有找到相关的. 那个自定义的高级用法还得研究一下, 不知道可不可获取自定义的 script_fields. 多谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611290

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX