我正在使用弹性搜索尝试获取一组问题的每个“标签”的数量,这是映射的粗略图片:
schoolId
schoolname
问题1
tags(array)
tagId , tagStr
tagid , tagStr
tagid , tagStr
问题2
tags(array)
tagId , tagStr
tagid , tagStr
tagid , tagStr
问题3
tags(array)
tagId , tagStr
tagid , tagStr
tagid , tagStr
现在我需要来自所有三个领域的顶级常见标签(问题1,问题2,问题3)
像这样tagStr:clean,doc_count:6
tagStr:faculty,doc_count:4
tagStr:study,doc_count:2
我正在使用弹性搜索提供的聚合。像这样
"aggs": {
"Question1_TAGS": {
"terms": {
"field": "question1.tags.tagStr",
"size": 3
}
},
"Question2_TAGS": {
"terms": {
"field": "question2.tags.tagStr",
"size": 3
}
},
"Question3_TAGS": {
"terms": {
"field": "question3.tags.tagStr",
"size": 3
}
}
}
但它正在给我每个问题的标签及其计数
像这样 - "aggregations": {
"Question1_TAGS": {
"buckets": [
{
"key": "clean",
"doc_count": 34
},
{
"key": "faculty",
"doc_count": 34
},
{
"key": "staff",
"doc_count": 21
}
]
},
"Question3_TAGS": {
"buckets": [
{
"key": "good class",
"doc_count": 35
},
{
"key": "library",
"doc_count": 22
},
{
"key": "sports",
"doc_count": 22
}
]
},
"Question2_TAGS": {
"buckets": [
{
"key": "Nice class",
"doc_count": 40
},
{
"key": "Clean",
"doc_count": 37
},
{
"key": "faculty",
"doc_count": 31
}
]
}
但是我需要来自所有三个问题的常见标签,如下所示。
tagStr:clean,doc_count:6
tagStr:faculty,doc_count:4
tagStr:study,doc_count:2
如果有人能帮助我,我将非常感激。 提前致谢 !! :)答案 0 :(得分:0)
您可以尝试使用单个terms
聚合,并使用script
加入您的三个数组
"aggs": {
"Question_TAGS": {
"terms": {
"script": "doc['question1.tags.tagStr'].values + doc['question2.tags.tagStr'].values + doc['question2.tags.tagStr'].values",
"size": 3
}
}
}
这样,所有tagStr
字段都将合并到一个运行terms
聚合的单个数组中。试一试。