ElasticSearch 脚本简单使用

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支持各种数学运算,无论是加减乘除、还是取模、算乘方、开根号、求对数,都是支持的,详情可见:

ElasticSearch使用脚步做数序运算 加减乘除 

https://blog.csdn.net/u014646662/article/details/98170053

脚本参数说明

lang:用于指定加脚本的语言,默认 painless。

sourceid:指定脚本的源。内联脚本是如上例所示的指定源。存储的脚本指定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
发布了139 篇原创文章 · 获赞 273 · 访问量 666万+

猜你喜欢

转载自blog.csdn.net/u014646662/article/details/98186835