[Elasticsearch] Filter Aggregation 사용하기.
Elastic/Elasticsearch 2022. 7. 18. 18:50보통 Query 절에서 문서를 필터링 하고 Aggs 에서 집합/분석 질의를 하게 됩니다.
이 경우 성능적 잇점을 가져 가기 위해서는 보통 아래 두 가지 설정만 잘 사용 하면 됩니다.
1. Query 절은 Non-Scoring 질의를 사용하고
2. Size 파라미터 값을 0 으로 사용하고
그 이외는 기본적으로 Elasticsearch 에서 Cache 기능이 잘 동작 하기 때문에 크게 고민을 하지 않으셔도 어느 정도의 성능은 나온다고 보시면 됩니다.
Bucket Aggregation 중 Query 절에서 Filtering 하는 것과 같은 기능이 있어서 문서 링크와 주의 사항(?) 올려 봅니다.
아래 두 질의는 같은 결과를 리턴 합니다.
Case 1)
POST /sales/_search?size=0&filter_path=aggregations
{
"query": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
Case 2)
POST /sales/_search?size=0&filter_path=aggregations
{
"aggs": {
"t_shirts": {
"filter": { "term": { "type": "t-shirt" } },
"aggs": {
"avg_price": { "avg": { "field": "price" } }
}
}
}
}
여기서 C1, C2 중 어떤게 좀 더 성능적으로 우세 할까요?
공홈 문서에 따르면 Sub Aggregation. 을 가지는 Filter Aggregation 보다는 Top Level Query 를 사용하는게 더 빠르다고 합니다.
그리고 다수의 Filter Aggregation 을 사용 하는 것 보다는 Filters Aggregation 을 사용 하는게 더 빠르다고 하니 참고 해서 사용 하시기 바랍니다.
제가 사용 한다고 하면 Top Level Query 에 Filter Query 나 Non-Scoring Query 를 이용해서 사용 할 것 같습니다.