ElasticStack/Elasticsearch
[es] top_hit
닉의네임
2024. 10. 15. 15:43
반응형
Elasticsearch의 top_hits 집계는 각 버킷에 대해 상위 N개의 문서를 검색할 수 있는 메트릭 집계 유형입니다. 예를 들어 terms, date_histogram 같은 버킷 집계와 함께 사용하여, 버킷별로 샘플 문서를 가져오고자 할 때 유용합니다. 이때 avg, sum과 같은 메트릭 값을 계산하는 대신, 실제 문서를 직접 조회하는 방식입니다.
예시: 카테고리별 상위 인기 게시글
예를 들어, 블로그 게시글을 저장한 인덱스가 있고, 각 문서에는 title, category, views 필드가 있다고 가정합시다. 카테고리별로 조회수가 가장 높은 게시글 3개를 검색하고자 할 때 아래와 같은 쿼리를 사용할 수 있습니다.
GET /your_index/_search
{
"size": 0,
"aggs": {
"categories": {
"terms": {
"field": "category.keyword"
},
"aggs": {
"top_articles": {
"top_hits": {
"sort": [
{
"views": {
"order": "desc"
}
}
],
"size": 3,
"_source": ["title", "views"]
}
}
}
}
}
}
쿼리 설명
- "size": 0: 최상위 검색 결과는 필요하지 않으므로 0으로 설정하여 문서 검색 결과를 반환하지 않도록 합니다. 오직 집계 결과만 필요합니다.
- "terms" 집계: 각 category에 대해 버킷을 생성합니다.
- "top_hits" 집계: 각 카테고리 버킷에 대해, views 필드의 내림차순으로 상위 3개의 문서를 가져옵니다.
- "_source": ["title", "views"]: 반환할 필드를 title과 views로 제한합니다.
이러한 방식으로, Elasticsearch의 top_hits 집계를 사용하여 버킷별로 상위 문서를 손쉽게 조회할 수 있습니다.
반응형