gpt4 book ai didi

elasticsearch - elasticsearch字符串聚合数组

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

我需要一个聚合查询来获取包含我所有根文件夹的存储桶。我的elasticsearch中的所有文档都有一个名为path的字段,我在其中存储一个数组以及文档所在的路径(例如path = [1.3。,1.2.4,5.,11])。

如果我使用常规术语聚合

"terms": {
"field": "path.keyword"
}

不幸的是,我得到了所有唯一的路径:
"buckets" : [
{
"key" : "1.3."
"doc_count" : 6
},
{
"key" : "11."
"doc_count" : 3
},
{
"key" : "5."
"doc_count" : 3
},
{
"key" : "1.2.4."
"doc_count" : 1
}
]

我试图用一种轻松的脚本解决它
"terms": {
"script": "doc['path.keyword'].value.substring(0, doc['path.keyword'].value.indexOf('.') )"
}

但是然后我只得到路径数组的最后一个元素
"buckets" : [
{
"key" : "1",
"doc_count" : 7
},
{
"key" : "11",
"doc_count" : 3
}
]

如何只获取根文件夹?

最佳答案

使用doc [“field”]。value将给出字段中所有值的单个字符串。
在脚本中,您需要返回具有根值的值数组,即遍历field的所有元素并返回子字符串数组。

样本数据:

"hits" : [
{
"_index" : "index84",
"_type" : "_doc",
"_id" : "yihhWnEBHtQEPt4DqWLz",
"_score" : 1.0,
"_source" : {
"path" : [
"1.1.1",
"1.2",
"2.1.1",
"12.11"
]
}
}
]

询问
{
"aggs": {
"root_path": {
"terms": {
"script": {
"source": "def firstIndex=0;def path=[]; for(int i=0;i<doc['path.keyword'].length;i++){firstIndex=doc['path.keyword'][i].indexOf('.'); path.add(doc['path.keyword'][i].substring(0,firstIndex))} return path;"
}
}
}
}
}

结果:
"aggregations" : {
"root_path" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "1",
"doc_count" : 1
},
{
"key" : "12",
"doc_count" : 1
},
{
"key" : "2",
"doc_count" : 1
}
]
}
}

关于elasticsearch - elasticsearch字符串聚合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61103392/

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