BackEnd/elasticsearch
-
21. Search After for JAVA (10,000건 이상 조회)BackEnd/elasticsearch 2021. 12. 30. 20:43
엘라스틱서치의 페이징 처리는 from과 size를 사용하여 구현할 수 있습니다. 그러나, 검색 요청은 from + size에 비례하여 힙 메모리와 시간이 들기에 기본값을 10,000건으로 제한하고 있습니다(index.max_result_window). Scroll api 사용이 가능하지만 스크롤 컨텍스트 비용이 많이 들기에 실시간 사용자 요청에는 Search After를 사용합니다. Search After는 많은 쿼리를 병렬로 스크롤하는 솔루션으로, 이전 페이지의 결과를 사용하여 다음 페이지를 조회합니다. 문서의 고유한 값이 있는 필드를 순위 결정자로 사용해야 합니다. 그렇지 않으면 정렬 순서가 정의되지 않아 결과가 누락되거나 중복될 수 있습니다. Search After는 순위 결정자가 제공한 값과 완전..
-
20. 엘라스틱서치 클라이언트 (JAVA Client)BackEnd/elasticsearch 2021. 10. 15. 18:29
엘라스틱서치에서 지원하는 언어별 라이브러리 ■ Java REST Client ■ Java API ■ JavaScript API ■ Groovy API ■ .NET API ■ PHP API ■ Python API ■ Ruby API ■ Community Contributed Clients ■ 참고 : https://www.elastic.co/guide/en/elasticsearch/client/index.html 자바 클라이언트 모듈 1) REST 클라이언트 > Java High Level REST Client라고도 불린다. > HTTP 방식을 이용해 엘라스틱서치와 통신한다. > 내부적으로는 HttpClient 모듈을 사용한다. 2) Transport 클라이언트 > Java Client라고도 불린다. > ..
-
19. 스냅숏(Snapshot)을 이용한 백업과 복구BackEnd/elasticsearch 2021. 10. 12. 17:41
엘라스틱서치에서 제공하는 _snapshot API을 이용해 개별 인덱스를 백업할 수도 있고 클러스터 전체를 스냅숏으로 만드는 것도 가능합니다. 1. 백업 # 1) config 폴더 내 elasticsearch.yml 설정 파일에 스냅숏 경로 지정 path.repo: ["/home/snapshot/elastic/backup"] # 2) 검색엔진 재시작 # 3) 리포지토리(스냅숏들을 저장하는 논리적인 공간) 생성 PUT _snapshot/movie_data_backup { "type": "fs", "settings": { "location": "/home/snapshot/elastic/backup", "compress": true } } # 4) 스냅숏 생성 # 기본적으로 스냅숏 대상이 되는 인덱스는 더 이..
-
18. 별칭(Alias)BackEnd/elasticsearch 2021. 10. 12. 17:23
엘라스틱서치 클러스터를 운영 중에 인덱스 매핑 설정이 변경되거나 인덱스가 깨진다면 기존에 생성된 인덱스를 삭제하고 다시 생성해야 합니다. 운영 중인 서비스에 인덱스를 삭제하게 되면 장애가 발생할 것입니다. 이러한 문제를 방지하기 위해 엘라스틱서치에서는 별칭(Alias) 기능을 제공합니다. 인덱스를 생성할 때 별칭을 사용해 인덱스가 추가되거나 삭제될 경우 새로운 인덱스로 사용자 요청이 자연스럽게 이동하도록 유도합니다. 또한 인덱스의 별칭을 이용하면 두 개 이상의 인덱스를 검색해야 할 때 한 번의 요청만으로도 모두 검색되도록 만들기도 쉽습니다. # 인덱스 생성 POST _reindex { "source": { "index": "movie_search" }, "dest": { "index": "movie_in..
-
17. 검색 템플릿(Search Templates)BackEnd/elasticsearch 2021. 10. 12. 17:10
검색 템플릿(Search Templates)는 엘라스틱서치 1.1 버전에 추가된 오래된 기능입니다. 복잡한 검색 로직을 템플릿으로 저장하고 활용할 수 있기 때문에 매우 유용합니다. 검색 템플릿의 필드명과 파라미터를 사용해서 쿼리를 전송하고 템플릿에 제공한 파라미터로 실제 검색이 이루어 집니다. 검색 템플릿을 사용하면 클라이언트 코드가 단순해지며, 검색의 요구사항이 변경될 때 클라이언트 프로그램을 수정배포 하는 것이 아니라 엘라스틱서치에 저장되어 있는 템플릿의 기존 쿼리를 수정하고 새 쿼리를 작성할 수 있다는 이점이 있습니다. 검색 템플릿은 Mustache라는 템플릿 엔진을 사용해서 표현됩니다. # movieNm 필드에 매칭된 데이터를 검색하는 쿼리가 수행되는 템플릿 생성 POST _scripts/movi..
-
16. 파이프라인 집계(Pipeline Aggregations)BackEnd/elasticsearch 2021. 10. 9. 11:37
파이프라인 집계(Pipeline Aggregations)는 다른 집계와 달리 쿼리 조건에 부합하는 문서에 대해 집계를 수행하는 것이 아니라 다른 집계로 생성된 버킷을 참조해서 집계를 수행합니다. 부모(Parent), 형제(Sibling)라는 두 가지 유형이 있으며 집계를 수행할 때는 buckets_path 파라미터를 사용해 참조할 집계의 경로를 지정함으로써 체인 형식으로 집계 간의 연산이 이루어 집니다. # 집계 참조 방법 AGG_SEPARATOR = '>'; METRIC_SEPARATOR = '.'; AGG_NAME = ; METRIC = ; PATH = [ , ]* [ , ]; 1. 형제 집계(Sibling Aggregation) 동일 선상의 위치에서 수행되는 새 집계를 의미합니다. 즉, 기존 버킷에..
-
15. 버킷 집계(Bucket Aggregations)BackEnd/elasticsearch 2021. 10. 9. 10:36
버킷 집계(Bucket Aggregations)는 메트릭 집계와 다르게 메트릭을 계산하지 않고 버킷을 생성합니다. 생성되는 버킷은 쿼리와 함께 수행되어 쿼리 결과에 따른 컨텍스트 내에서 집계가 이루어 집니다. 이렇게 집계된 버킷은 또 다시 하위에서 집계를 한 번 더 수행해서 집계된 결과에 대해 중첩된 집계를 수행하는 것이 가능합니다. 버킷을 생성한다는 것은 집계된 결과 데이터 집합을 메모리에 저장한다는 의미이기 때문에 중첩되는 단계가 깊어질수록 메모리 사용량은 점점 더 증가해서 성능에 악영향을 줄 수 있습니다. # 사용 가능한 최대 버킷 수 -1(전체대상) search.max_buckets 1. 범위 집계(Range Aggregations) from과 to 속성을 지정하는데 from을 시작으로 to까지의..
-
14. 메트릭 집계(Metrics Aggregations)BackEnd/elasticsearch 2021. 10. 9. 09:08
메트릭 집계(Metrics Aggregations)를 사용하면 특정 필드에 대해 합이나 평균을 계산하거나 다른 집계와 중첩해서 결과에 대해 특정 필드의 _score 값에 따라 정렬을 수행하거나 지리 정보를 통해 범위 계산을 하는 등의 다양한 집계를 수행할 수 있습니다. 일반적으로 필드 데이터를 사용해 집계가 이뤄지지만 스크립트를 사용해 조금 더 유연하게 집계를 수행할 수도 있습니다. 1. 구조 # 요청 구조 GET /apache-web-log/_search?size=0 # 집계된 문서들의 데이터는 불필요하므로 size=0 지정 { "aggs": { # aggregation or aggs "": { "": { # sum, avg, min, max, value_count 등 "field": "" } } } ..