gpt4 book ai didi

elasticsearch - 如何使用脚本聚合 'ip'字段

转载 作者:行者123 更新时间:2023-12-02 23:18:12 26 4
gpt4 key购买 nike

我正在尝试使用像这样的内联脚本在'ip'类型的字段上执行术语汇总:

{
"aggs": {
"by_ipaddress": {
"terms": {
"script": {
"inline": "doc['ipAddressFrom'].value",
"lang": "painless"
}
}
}
}
}

它引发以下异常:
"reason": {
"type": "script_exception",
"reason": "runtime error",
"caused_by": {
"type": "array_index_out_of_bounds_exception",
"reason": "16"
},
"script_stack": [
"org.apache.lucene.util.UnicodeUtil.UTF8toUTF16(UnicodeUtil.java:602)",
"org.apache.lucene.util.BytesRef.utf8ToString(BytesRef.java:152)",
"org.elasticsearch.index.fielddata.ScriptDocValues$Strings.getValue(ScriptDocValues.java:83)",
"doc['ipAddressFrom'].value",
" ^---- HERE"
],
"script": "doc['ipAddressFrom'].value",
"lang": "painless"
}

但是当我在同一个字段上聚合时:
{
"aggs": {
"by_ipaddress": {
"terms": {
"field": "ipAddressFrom"
}
}
}
}

有用。

字段“ipAddressFrom”的映射为:
 "ipAddressFrom" : {
"type" : "ip"
}

请让我知道如何在脚本中使用ip字段。

最佳答案

对于Elasticsearch 6.x,在无痛脚本中使用ip类型没有任何问题。

无法使用inline进行汇总,因为某些文档字段ipAddressFrom不存在。

您可以使用以下方法修复聚合:

 "script": {
"inline": "if (doc.containsKey('ipAddressFrom') && !doc['ipAddressFrom'].empty){ return doc['ipAddressFrom'].value} else {return '0'}",
"lang": "painless"
}

关于elasticsearch - 如何使用脚本聚合 'ip'字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52366456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com