728x90
엘라스틱 서치는 대량의 데이터를 처리하기 위해 기본적으로 데이터를 분산 처리 하며, 빠른 검색을 위해 내부적으로 요청이 발생하면 모든 샤드에 검색 요청을 브로드 캐스팅 전달하고 기다린다. 각 샤드는 자신이 가지고 있는 데이터를 기준으로 검색을 수행하고 그 결과를 반환하게 되며, 모든 샤드로부터 검색 결과가 도착하면 도착한 모든 결과를 조합해서 최종 질의 결과를 출력한다.
동적 분배 방식의 샤드 선택
PUT _cluster/settings
{
"transient": {
"cluster.routing.use_adaptive_replica_selection": true
}
}
- 엘라스틱서치는 부하 분산과 장애 극복을 위해 원본 샤드의 데이터를 복제한 레플리카 샤드를 함께 운영하는데, 검색 시 모든 샤드에서 검색을 수행하게 된다면 사용자에게 중복 데이터를 전달할 것이다. -> 엘라스틱서치는 검색을 수행할 때 동일 데이터를 가지고 있는 샤드 중 하나만 선택해 검색을 수행한다.
- 설정을 하지 않았을 경우 라운드 로빈 알고리즘 사용
- 순차적으로 샤드를 선택
- 동적 분배 방식은 검색 요청의 응답 시간, 검색 요청을 하는 스레드 풀의 크기 등을 고려해 최적의 샤드를 동적으로 결정하는 방식이다.
글로벌 타임아웃 설정
PUT _cluster/settings
{
"transient": {
"search.default_search_timeout": "1s"
}
}
- 개별 검색 요청의 경우에는 Request Body에 직접 타임아웃을 설정할 수도 있지만, 모든 검색 쿼리에 동일하게 적용되도록 설정할 수도 있다.
- 글로벌로 적용되는 타임아웃의 기본 정책은 무제한(-1)이다.
Search Shards API
POST movie_search/_search_shards
- Search Shards API를 이용해 검색이 수행되는 노드 및 샤드에 대한 정보를 알 수 있다.
- 질의 최적화, 질의가 오류가 발생할 때 문제를 해결하는데 유용하게 사용할 수 있다.
Multi Search API
POST _msearch
{"index" : "movie_auto"}
{"query" : ("match_all" : (l}, "from" : 0, "size": 10}
("index" : "movie_search"}
("query" : {"match_all" : (lY, "from" : 0, "size" : 10}
- 여러건의 검색 요청을 통합해서 한 번에 요청하고 한 번에 결과를 종합해서 받을 때 사용하는 API다.
- 동시에 여러 개의 색인에서 검색을 수행할 수 있으므로 사용자별 맞춤 페이지 등을 구현할 때, 여러 인덱스에서 사용자별 특화된 정보를 가져올 때 유용하다.
Count API
URI 검색
POST movie_search/_count?q=prdtYear: 2017
RequestBody 검색
POST movie_search/_count
{
"query": {
"query_string": {
"default_field": "prdtYear",
"query": "2017"
}
}
}
- CountAPI를 이용하면 검색된 문서의 갯수만 가지고 올 수 있다.
Validate API
URI 검색
POST movie_ search/_validate/query?@=prdtYear:2017
RequestBody 검색
//POST movie_search/_validate/query
POST movie_search/_validate/query?rewrite=true
{
"query": {
"match": {
"prdtYear": 2017
}
}
}
- Validate API를 통해 쿼리가 실행하기 전에 쿼리가 유효하게 작성되었는지 검증하는 것이 가능하다.
- 쿼리가 오류가 발생할 경우 Valid값이 false로만 리턴되는데, 쿼리가 실패한 원인을 알고 싶을 경우에는 요청 URL 파라미터로 rewrite=true를 추가하면 된다.
ExplainAPI
POST movie_search/_explain/8
{
"query": {
"term": {
"prdtYear": 2017
}
}
}
- _score를 통해 검색한 키워드와 검색 결과가 얼마나 유사한지 확인할 수 있는데, _Score가 어떻게 계산이 된 것인지 알고 싶다면 ExplainAPI를 호출하면 된다.
Profile API
POST movie_search/_search
{
"profile": true,
"query": {
"match_all": {}
}
}
- ProfileAPI는 쿼리에 상세한 수행 계획과 각 수행 계획별로 수행된 시간을 돌려주므로 성능을 뷰닝하거나, 디버깅할 때 유용하다.
- 단, 사용할 때 반드시 ProfileAPI 결과가 매우 상세히 설명되어 결과가 매우 크다.
- 특히 여러 샤드 걸쳐 검색되는 경우 더욱 결과값이 길어지기 때문에 확인하기 어렵다.
- 샤드별 몇건의 문서가 매칭되었고, 검색을 수행한 시간이 어떤지에 대한 정보가 상세히 제공
- 내 질의를 실행하는 과정에 각 샤드별 수행 시간을 알고 싶다면 ProfileAPI를 사용하자
728x90
'Elastic Search' 카테고리의 다른 글
| Ch05. 데이터 집계 - 메트릭 집계 (0) | 2025.09.18 |
|---|---|
| Ch05. 데이터 집계 - 집계 (0) | 2025.09.18 |
| Ch04. 데이터 검색 - Query DSL의 주요 쿼리 (0) | 2025.09.14 |
| Ch04. 데이터 검색 - Query DSL 이해하기 (0) | 2025.09.14 |
| Ch04. 데이터 검색 - 검색 API (0) | 2025.09.14 |