子串上的ElasticSearch项聚合

子串上的ElasticSearch项聚合,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我想做一个zipCode的术语聚合-一个5位数,一个3位数(德国) 5位数是一个正常的术语集合 对于3位数字,我正在尝试以下脚本: terms.script={ "source": "def zipCode = doc['zip.keyword'].size() > 0 ? doc['zip.keyword'].substring(0,2) : ''; return zipCode", "lang": "painless",

我想做一个zipCode的术语聚合-一个5位数,一个3位数(德国)

5位数是一个正常的术语集合

对于3位数字,我正在尝试以下脚本:

terms.script={
                "source": "def zipCode = doc['zip.keyword'].size() > 0 ? doc['zip.keyword'].substring(0,2) : ''; return zipCode",
                "lang": "painless",
            }
这让我犯了以下错误:

root_cause: [
    {
      type: 'script_exception',
      reason: 'runtime error',
      script_stack: [Array],
      script: "def zipCode = doc['zip.keyword'].size() > 0 ? " +
        "doc['zip.keyword'].substring(0,2) : ''; return " +
        'zipCode',
      lang: 'painless'
    }
  ],
字段的映射:

  zip: {
            type: "text",
            fields: {
                keyword: {
                    type: "keyword",
                    ignore_above: 256
                }
             }
          }
使用ElasticSearch 7.6

那么,如何使用脚本化的字段工作实现术语聚合呢?:)


重要说明-有时字段为空或不存在。

当您打算对关键字执行字符串操作时,必须对其调用
.value

{
  "size": 0,
  "aggs": {
    "zipcodes": {
      "terms": {
        "script": {
          "source": """
          def zipCode = doc['zip.keyword'].size() > 0
              ? doc['zip.keyword'].value.substring(0, 2)
              : '';
          return zipCode
          """,
          "lang": "painless"
        }
      }
    }
  }
}

当您打算对关键字执行字符串操作时,必须对其调用
.value

{
  "size": 0,
  "aggs": {
    "zipcodes": {
      "terms": {
        "script": {
          "source": """
          def zipCode = doc['zip.keyword'].size() > 0
              ? doc['zip.keyword'].value.substring(0, 2)
              : '';
          return zipCode
          """,
          "lang": "painless"
        }
      }
    }
  }
}

您是从上面粘贴了我的代码还是调整了原始代码?顺便说一句,您可以跳入脚本并调用
Debug.explain(无论什么)
来调查什么是什么:vs我没有粘贴它-我现在就粘贴它-至少在IntelliJ中是这样的“”“给了我一个错误-如果我是新手,很抱歉。否则同样的错误,这不是解决这个特定问题的方法,但是我会考虑只对短版本进行索引——空间需求可能会很小,而且我发现它会更干净(更快)。而不是脚本聚合您是从上面粘贴了我的代码还是调整了原始代码?顺便说一句,您可以跳入脚本并调用
Debug.explain(无论什么)
来调查什么是什么:vs我没有粘贴它-我现在粘贴它-至少在IntelliJ中是这样的“”“给了我一个错误-如果我是新手,很抱歉。否则同样的错误,这不是解决这个特定问题的方法,但是我会考虑只对短版本进行索引——空间需求可能会很小,而且我发现它比脚本聚合更干净(而且更快)。