elasticsearch
-
Alias & ReindexBackEnd/Elasticsearch API 2025. 3. 15. 11:00
Elasticsearch에서 인덱스의 매핑은 변경할 수 없습니다. 이는 색인된 데이터가 특정한 구조와 형식으로 저장되기 때문입니다. 매핑을 변경하면 기존 데이터가 더이상 유효하지 않거나 잘못된 형식으로 해석될 수 있으므로, 매핑을 변경하려면 새로운 인덱스를 생성하고 데이터를 재색인해야 합니다. Alias & Reindex Alias는 인덱스의 매핑 변경 시 유용합니다. 새로운 인덱스를 생성하고 데이터를 재색인(Reindex)한 후, Alias를 업데이트하여 검색 요청을 새로운 인덱스로 전달할 수 있습니다. 이는 검색 서비스 중단 없이 인덱스를 관리하는 방법입니다. 또한, Alias는 여러 인덱스를 하나의 이름으로 통합하여 검색할 수 있게 합니다(Multi Index). Alias 사용 방법1. inde..
-
IntroductionBackEnd/Elasticsearch API 2025. 3. 8. 12:00
Overview Backend Developer, Server Developer로 실무에서 사용하는 Elasticsearch API에 대해 정리합니다. 모든 API는 Kibana Dev Tools에서 확인 가능합니다. Elasticsearch에 대한 상세 정보는 Elasticsearch 포스팅을 참고하시면 됩니다. ClusterGET /_cluster/health초록색: 모든 주 샤드와 복제 샤드가 할당되어 있는 상태입니다.노란색: 모든 주 샤드는 할당되었지만 일부 복제 샤드는 할당되지 않은 상태입니다.빨간색: 일부 주 샤드가 할당되지 않은 상태입니다. IndexGET /_cat/indices?vElasticsearch 클러스터의 모든 인덱스를 나열하며, 각 인덱스의 상태, 문서 수, 총 크기 등을 표..
-
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는 순위 결정자가 제공한 값과 완전..
-
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까지의..