UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Elasticsearch】cardinalityを使ってaggregationの結果の重複をなくす

aggregationを使って集約した結果に重複がありそうだったので、この重複をなくしたい

重複を削除して集計する場合はcardinalityを使う

www.elastic.co

GET /language/_search?size=0
{
  "aggs": {
    "lang": {
      "terms": {
        "field": "language",
        "size": 10
      },
      "aggs": {
        "id": {
          "cardinality": {
            "field": "id.value.keyword"
          }
        }
      }
    }
  },
}

結果

{
    ...
    "aggregations" : {
        "lang" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets" : [
            {
                "key" : "EN",
                "doc_count" : 3416188,
                "id" : {
                    "value" : 1285555
                }
            },
            {
                "key" : "KO",
                "doc_count" : 3416162,
                "id" : {
                    "value" : 1288722
                }
            }
        ]
    }
}

3分の2が重複していたやばい

検索結果の重複削除はField Collapsingを使う

集約結果ではなく検索結果の重複を無くしたい場合はField Collapsingを使う

uga-box.hatenablog.com