ElasticSearch

[ElasticSearch] aggs top_hits (aggregation 중복제거 개념?)

SongMinu 2019. 6. 5. 14:35
728x90

이레스틱 쿼리로 데이터를 불러와 화면단에 출력중에 한가지 요청 사항 들어온게

특정 조건하에 중복되는 데이터들이 있다면 화면에 1개만 출력해달라는 요청사항이 들어와있어서

찾게된 쿼리인데 aggs 옵션중에 top_hits라는게 있었다.

난 aggs로는 통계 형식의 집계만 가능한 줄 알았는데 hits도 출력이 가능했다.

{
  "size": 0,
  "aggs": {
    "dedup": {
      "terms": {
        "field": "type"
      },
      "aggs": {
        "dedup_docs": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

이런식의 쿼리를 사용하면 해당 인덱스 내에서 필드명이 type 인 데이터들 중에 값이 같으면 1개의 hits 데이터를 보여준다.

top_hits 안에 size 개수를 변경되면 그만큼 출력이 된다.

다음은 출력된 예이다.

결과를 보면

type필드에 port 값이 들어 있는 데이터가 188474개가 있고 그 중에 1개의 데이터를 출력했고 다음 app이 84795개와 1개의 데이터가 출력되어 나온다.

개수가 가장 높은 것부터 내림차순으로 출력이 된다.

기존에 hits 데이터를 불러올 때 사용하는 쿼리처럼 sort를 이용한 소팅과 _source를 이용한 원하는 필드값만 출력도 가능하다.

{
  "aggs": {
    "top_tags": {
      "terms": {
        "field": "type",
        "size": 3
      },
      "aggs": {
        "top_sales_hits": {
          "top_hits": {
            "sort": [
              {
                "port._datetime": {
                  "order": "desc"
                }
              }
            ],
            "_source": {
              "includes": [
                "port.aggr_date",
                "port.aggr_time"
              ]
            },
            "size": 1
          }
        }
      }
    }
  }
}

출처 :

<https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html>

반응형

'ElasticSearch' 카테고리의 다른 글

[ElasticSearch] op_type option  (0) 2019.06.07
[ElasticSearch] _update로 데이터 update  (0) 2019.06.07
크롬 (postman)  (0) 2017.08.20
CURL 처리  (0) 2017.08.20
JSON, JSON 스타일  (0) 2017.08.20