ES如何使用脚本

0.官方网站

1.默认的脚本语言是painless,运行用其他语言编写的脚本,通过参数lang指定

2.脚本例子如下

PUT my_index/_doc/1
{
  "my_field": 5
}
GET /my_index/_search
GET my_index/_search
{
  "script_fields": {
    "my_doubled_field": {
      "script": {
        "lang":   "expression",
        "source": "doc['my_field'] * multiplier",
        "params": {
          "multiplier": 2
        }
      }
    }
  }
}

原理:当Elasticsearch第一次运行新脚本时,它会编译它并将编译后的版本存储在缓存,编译会比较的耗时过程,通过参数的params的方式,只需要编译一次,而使用硬编码的方式每次运行都会进行编译,例如上例的 "source": "doc['my_field'] * 2" 默认情况下,每分钟最多编译15个内联脚本。可以通过设置script.max_compilations_rate来动态更改此设置。

3.将脚本存放_scripts里,通过id调用

定义脚本

POST _scripts/calculate-score
{
  "script": {
    "lang": "painless",
    "source": "_score * 2 + params.my_modifier"
  }
}

获取脚本

GET _scripts/calculate-score

使用脚本

GET my_index/_search
{
  "script_fields": {
    "my_doubled_field": {
      "script": {
         "id": "calculate-score",
          "params": {
            "my_modifier": 2
          }
      }
    }
  }
}

删除脚本

DELETE _scripts/calculate-score

4.脚本的参数:
script.cache.expire:默认脚本不基于时间过期

script.cache.max_size:默认的脚本缓存大小100

script.max_size_in_bytes:默认的脚本的大小65535

猜你喜欢

转载自www.cnblogs.com/glblog/p/12012375.html
今日推荐