ElasticSearch 脚本简单使用
ElasticSearch 7.X
如发现问题可以看官方文档
1、脚本语法
2、脚本参数 parameters
3、简单格式 Short
4、存储脚本 Stored
对人工智能感兴趣点击下面的连接
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。
https://www.cbedai.net/u014646662
1、脚本语法
Elasticsearch API在任何地方都是支持脚本的,语法都遵循相同的模式:
"script": {
"lang": "...",
"source" | "id": "...",
"params": { ... }
}
2、脚本参数 parameters
PUT my_index/_doc/1
{
"my_field": 5
}
GET my_index/_search
{
"script_fields": {
"my_doubled_field": {
"script": {
"lang": "expression",
"source": "doc['my_field'] * multiplier",
"params": {
"multiplier": 2
}
}
}
}
}
执行结果:
其他内容省略
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"fields" : {
"my_doubled_field" : [
10.0
]
}
}
在脚本中使用索引中的字段:doc['字段名'],expression支持各种数学运算,无论是加减乘除、还是取模、算乘方、开根号、求对数,都是支持的,详情可见:
https://blog.csdn.net/u014646662/article/details/98170053
脚本参数说明
lang:用于指定加脚本的语言,默认 painless。
source
, id:
指定脚本的源。内联脚本是如上例所示的指定源。存储的脚本指定id,并从集群状态检索(请参阅存储的脚本)。
params:指定作为变量传递到脚本中的任何命名参数。
当Elasticsearch第一次看到一个新脚本时,它会编译它并将编译后的版本存储在缓存中。编译可能是一个繁重的过程。
如果需要将变量传递到脚本中,应该将它们作为命名params传递,而不是将值硬编码到脚本中。例如,如果您希望能够将字段值乘以不同的乘数,请不要将乘数硬编码到脚本中:
"source": "doc['my_field'] * 2"
相反,将它作为一个命名参数传递进来:
"source": "doc['my_field'] * multiplier",
"params": {
"multiplier": 2
}
1、第一个版本必须在每次乘数变化时重新编译。第二个版本只编译一次。
2、如果您在很短的时间内编译了太多独特的脚本,Elasticsearch将使用一个circuit it_breaking_exception错误拒绝新的动态脚本。默认情况下,每分钟最多编译15个内联脚本。可以通过设置script.max_compilations_rate动态更改此设置。
3、简单格式 Short
为了简洁,可以使用简短的脚本形式。在短格式中,脚本由字符串而不是对象表示。这个字符串包含脚本的源代码。
"script": "ctx._source.likes++"
同一脚本的正常形式:
"script": {
"source": "ctx._source.likes++"
}
4、存储脚本 Stored
脚本可以使用_scripts端点存储在集群状态中并从集群状态检索。
下面是使用位于/_scripts/{id}的存储脚本的示例。
首先,在集群状态下创建名为calculate-score的脚本:
POST _scripts/calculate-score
{
"script": {
"lang": "painless",
"source": "Math.log(_score * 2) + params.my_modifier"
}
}
同样的获取脚本可以用:
GET _scripts/calculate-score
存储的脚本可以通过如下方式指定id参数来使用:
按照官方文档的操作,这里没有正确执行,如发现问题的原因,可以在评论中留言,
找到解决板后,这里会更新
GET _search
{
"query": {
"script": {
"script": {
"id": "calculate-score",
"params": {
"my_modifier": 2
}
}
}
}
}
删除
DELETE _scripts/calculate-score