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
}
}
}
}
}
}
출처 :
반응형
'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 |