Elasticsearch - 分组聚合 - 2个字段

时间:2016-08-08 12:42:33

标签: elasticsearch aggregation

我的映射是

{
"myapp": {
    "mappings": {
        "attempts": {
            "properties": {
                "answers": {
                    "properties": {
                        "question_id": {
                            "type": "long"
                        },
                        "status": {
                            "type": "long"
                        }
                    }
                },
                "exam_id": {
                    "type": "long"
                }
            }
        }
    }
}
}

我想按问题和状态分组

我想知道每个问题_有多少有状态1或2

P.S。 2次尝试可以有相同的问题

1 个答案:

答案 0 :(得分:1)

首先,您需要更新地图并将answers设为nested字段。如果没有nested,则会失去question_id字段和status字段之间的相关性。

{
"myapp": {
    "mappings": {
        "attempts": {
            "properties": {
                "answers": {
                    "type":"nested", <-- Update here
                    "properties": {
                        "question_id": {
                            "type": "long"
                        },
                        "status": {
                            "type": "long"
                        }
                    }
                },
                "exam_id": {
                    "type": "long"
                }
            }
        }
    }
}
}

您可以在子聚合中使用状态,如下所示

"aggs": {
    "nested_qid_agg": {
      "nested": {
        "path": "answers"
      },
      "aggs": {
        "qid": {
          "terms": {
            "field": "answers.question_id",
            "size": 0
          },
          "aggs": {
            "status": {
              "terms": {
                "field": "answers.status",
                "size": 0
              }
            }
          }
        }
      }
    }
  }