首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Elasticsearch

Elasticsearch script_fields 的重用问题

  •  
  •   Memento · 48 天前 · 927 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    目前 ES 版本 7.4;

    6 回复  |  直到 2019-10-21 14:23:42 +08:00
        1
    airfling   48 天前
    script_field 这个只是针对某个索引或者某个 template 的吧
        2
    Memento   48 天前
    @airfling 那 ES 有办法自定义变量, 然后重用于其他地方, 比如过滤或者其他变量的计算? `Solr` 中可以通过 `set(param, script)`, 然后其他地方可以通过 `$param` 获取该变量处理;
        3
    airfling   48 天前
    @Memento 似乎没有,es 对外开放的其实是接口,对索引和 templte 的配置,script_field 也算配置是保存在另外一个索引里的,你可以找下 es 是否支持自定义聚合,如果支持的话你用自定义聚合应该可以
        4
    Memento   48 天前
    @airfling 这跟聚合不一样吧, 需求是需要自定生成一个变量 A, 并且这个变量 A 参与到评分`boost`排序`sort`, 还有其他变量的计算, 如果不重用的话, 这些地方都需要计算一遍生成 A 的脚本.
        5
    airfling   48 天前   ♥ 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 那样进行嵌套,如果不能嵌套就自己用后面的高级语法自己定义一个
        6
    Memento   48 天前
    @airfling 嵌套我试了一下, 貌似不行, 文档中也没有找到相关的. 那个自定义的高级用法还得研究一下, 不知道可不可获取自定义的 script_fields. 多谢~
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2283 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    ♥ Do have faith in what you're doing.