子串上的ElasticSearch项聚合
我想做一个zipCode的术语聚合-一个5位数,一个3位数(德国) 5位数是一个正常的术语集合 对于3位数字,我正在尝试以下脚本:子串上的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",
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中是这样的“”“给了我一个错误-如果我是新手,很抱歉。否则同样的错误,这不是解决这个特定问题的方法,但是我会考虑只对短版本进行索引——空间需求可能会很小,而且我发现它比脚本聚合更干净(而且更快)。