gpt4 book ai didi

elasticsearch - Elasticsearch字段的汇总和计数聚合

转载 作者:行者123 更新时间:2023-12-03 01:40:19 24 4
gpt4 key购买 nike

我是Elasticsearch的新手,我希望对Elasticsearch 5.x索引中的字段执行某些聚合。我有一个索引,其中包含字段langs(具有嵌套结构)和docLang的文档。这些是动态映射的字段。以下是示例文档

DOC 1:

{
"_index":"A",
"_type":"document",
"_id":"1",
"_source":{
"text":"This is a test sentence.",
"langs":{
"X":{
"en":1,
"es":2,
"zh":3
},
"Y":{
"en":4,
"es":5,
"zh":6
}
},
"docLang": "en"
}
}

DOC 2:
{
"_index":"A",
"_type":"document",
"_id":"2",
"_source":{
"text":"This is a test sentence.",
"langs":{
"X":{
"en":1,
"es":2
},
"Y":{
"en":3,
"es":4
}
},
"docLang": "es"
}
}

DOC 3:
{
"_index":"A",
"_type":"document",
"_id":"2",
"_source":{
"text":"This is a test sentence.",
"langs":{
"X":{
"en":1
},
"Y":{
"en":2
}
},
"docLang": "en"
}
}

我想以一种对每种键(X / Y)和每种语言都可以在索引中的所有文档中求和的方式,对 langs字段执行求和汇总。另外,我想从 docLang字段中为每种语言生成文档计数。

例如:对于上述3个文档,在 langs字段上的汇总汇总如下所示:
"langs":{  
"X":{
"en":3,
"es":4,
"zh":3
},
"Y":{
"en":9,
"es":9,
"zh":6
}
}
docLang计数如下所示:
 "docLang":{
"en" : 2,
"es" : 1
}

同样由于生产环境的某些限制,我无法在Elasticsearch中使用脚本。因此,我想知道是否可以仅将 field聚合类型用于上述字段?

最佳答案

{
"size": 0,
"aggs": {
"X": {
"nested": {
"path": "langs.X"
},
"aggs": {
"X_sum_en": {
"sum": {
"field": "langs.X.en"
}
},
"X_sum_es": {
"sum": {
"field": "langs.X.es"
}
},
"X_sum_zh": {
"sum": {
"field": "langs.X.zh"
}
}
}
},
"Y": {
"nested": {
"path": "langs.Y"
},
"aggs": {
"Y_sum_en": {
"sum": {
"field": "langs.Y.en"
}
},
"Y_sum_es": {
"sum": {
"field": "langs.Y.es"
}
},
"Y_sum_zh": {
"sum": {
"field": "langs.Y.zh"
}
}
}
},
"sum_docLang": {
"terms": {
"field": "docLang.keyword",
"size": 10
}
}
}
}

既然您没有提及,但我认为这很重要。我将 XY设置为 nested字段:
    "langs": {
"properties": {
"X": {
"type": "nested",
"properties": {
"en": {
"type": "long"
},
"es": {
"type": "long"
},
"zh": {
"type": "long"
}
}
},
"Y": {
"type": "nested",
"properties": {
"en": {
"type": "long"
},
"es": {
"type": "long"
},
"zh": {
"type": "long"
}
}
}
}
}

但是,如果您的字段根本不是 nested,在这里我的意思是实际上是Elasticsearch中的 nested字段类型,像这样的简单聚合就足够了:
{
"size": 0,
"aggs": {
"X_sum_en": {
"sum": {
"field": "langs.X.en"
}
},
"X_sum_es": {
"sum": {
"field": "langs.X.es"
}
},
"X_sum_zh": {
"sum": {
"field": "langs.X.zh"
}
},
"Y_sum_en": {
"sum": {
"field": "langs.Y.en"
}
},
"Y_sum_es": {
"sum": {
"field": "langs.Y.es"
}
},
"Y_sum_zh": {
"sum": {
"field": "langs.Y.zh"
}
},
"sum_docLang": {
"terms": {
"field": "docLang.keyword",
"size": 10
}
}
}
}

关于elasticsearch - Elasticsearch字段的汇总和计数聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309246/

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