弹性搜索 - 需要来自不同领域的通用标签

时间:2015-09-29 10:58:03

标签: java json elasticsearch aggregation

我正在使用弹性搜索尝试获取一组问题的每个“标签”的数量,这是映射的粗略图片:

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

如果有人能帮助我,我将非常感激。 提前致谢 !! :)

1 个答案:

答案 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聚合的单个数组中。试一试。