Choose a default theme

You can change your theme from the menu

Elasticsearch

Elasticsearch는 문서를 색인하고 검색·집계하는 시스템이다. Lucene 기반의 샤드로 데이터를 나누고 클러스터에 배치한다. 응용 프로그램에서는 검색 결과의 관련도와 필터·집계를 함께 다루는 용도로 사용한다.

분야

분산 검색·분석 엔진

인덱스와 샤드

논리적인 인덱스는 여러 샤드로 나뉠 수 있으며, 각 샤드는 데이터의 일부를 가진 Lucene 인덱스이다. 샤드 수와 배치는 분산 처리와 자원 사용에 영향을 준다. 데이터가 많다는 이유만으로 샤드를 무조건 늘리면 작은 샤드의 관리 비용이 커질 수 있다.

자체 운영, 관리형 서비스, Serverless는 운영자가 직접 제어하는 범위가 다르다. 따라서 특정 운영 절차나 샤드 설정을 모든 배포 방식에 그대로 적용하지 않는다.

검색을 위한 데이터 표현

색인 시 문서의 필드와 자료형을 정하고 검색할 값을 처리한다. 전문 검색의 분석 대상 텍스트와 정확한 값 비교를 위한 필드는 서로 다른 요구를 갖는다. 상품 설명에서 단어를 찾는 검색과 상품 식별자가 정확히 같은지 비교하는 검색을 구별해야 한다.

검색 결과의 관련도는 단순한 포함 여부와 다르다. 필터 조건, 분석 방식, 검색 질의와 점수 계산이 결과에 함께 영향을 준다. 따라서 테스트에는 대표 질의와 기대 결과를 포함하고 데이터 분포가 바뀌었을 때도 평가한다.

준실시간 검색과 refresh

색인 요청이 성공한 직후에도 새 문서가 검색에 즉시 보이지 않을 수 있다. refresh는 새 세그먼트를 검색에서 사용할 수 있도록 만드는 과정이며, 변경이 검색에 보이는 시점을 이해하는 데 중요하다.

refresh를 저장 장치의 완전한 동기화나 백업과 같은 의미로 해석해서는 안 된다. 검색 가시성과 장애 시 보존은 서로 다른 문제다. 또한 refresh 주기를 짧게 만드는 데에도 비용이 있으므로 필요한 가시성 지연과 처리량을 함께 판단한다.

원본 데이터와의 관계

서비스가 관계형 DB를 원본으로 쓰고 Elasticsearch를 검색용 사본으로 사용한다면, 두 시스템 사이의 갱신 지연과 재색인 절차를 설계해야 한다. 삭제와 중복 전송 처리도 포함된다. Lucene, Elasticsearch, OpenSearch는 관련되지만 별도 문서에서 구분할 대상이다.

함께 읽기

MySQL

참고 자료