美文网首页
painless split

painless split

作者: 秦汉邮侠 | 来源:发表于2020-01-05 00:56 被阅读0次

painless 简介

  • painless 是ES提供的一中脚本语言,语法和javascript/groovy类似,支持Java的基本类

应用

  • 需要某个字段做切分,例如按照空格space,点号dot切分

使用手册

image.png

https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-api-reference-field.html

image.png
  • 官方文档貌似对split没有过多的介绍和示例

https://discuss.elastic.co/t/can-we-use-split-processor-with-painless-scripting/98536

  • 在ES官方讨论区找到如下内容
String[] parts = /_/.split(request)

String.split is not available because it compiles a regex. In Painless, regexes are a feature that can be disabled, and also statically compiled (thus the special syntax using the "slashy string" to get a Pattern object above.

实践

  • 对某个字段做点号分隔,添加到新的字段上
POST /daily_quotes/_update_by_query?conflicts=proceed
{
  "script": {
    "source": "String s = ctx._source['tsCode'];String[] array = /\\./.split(s);ctx._source.code_a = array[0];ctx._source.region = array[1]",
    "lang": "painless"
  }
}
image.png
  • 做空格分隔时
POST /daily_quotes/_update_by_query?conflicts=proceed
{
  "script": {
    "source": "String s = ctx._source['tsCode'];String[] array = / /.split(s);ctx._source.code_a = array[0];ctx._source.region = array[1]",
    "lang": "painless"
  }
}
image.png
  • 切分分为两个,一中属于特殊字符,一种不属于特殊字符,带特殊加两个反斜杠

如何验证脚本

  • 参考文档

https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-execute-api.html#_score_context

  • 参考示例
POST /_scripts/painless/_execute
{
  "script": {
    "source": "String[] array = /\\./.split(params.count); return array.length",
    "params": {
      "count": "123.SH",
      "total": 1000.0
    }
  }
}

相关文章

网友评论

      本文标题:painless split

      本文链接:https://www.haomeiwen.com/subject/ybcqactx.html