https://docs.opensearch.org/latest/getting-started/concepts/
이 페이지는 OpenSearch와 관련된 주요 용어와 개념을 정의합니다.
문서(Document): OpenSearch에서 JSON 형식으로 저장되는 정보의 기본 단위입니다.
인덱스(Index): 관련 문서들의 모음입니다.
JSON (JavaScript Object Notation): OpenSearch에서 데이터를 저장하는 데 사용되는 텍스트 형식으로, 정보를 키-값 쌍으로 나타냅니다.
매핑(Mapping): 문서와 해당 필드가 어떻게 저장되고 인덱싱되어야 하는지를 지정하는 인덱스의 스키마 정의입니다.
노드(Node): OpenSearch 클러스터의 일부인 단일 서버입니다.
클러스터(Cluster): 함께 작업하는 OpenSearch 노드들의 모음입니다.
클러스터 매니저(Cluster manager): 클러스터 전체 작업을 관리하는 책임을 가진 노드입니다.
샤드(Shard): 인덱스 데이터의 하위 집합으로, 인덱스는 노드 간 분산을 위해 샤드로 분할됩니다.
프라이머리 샤드(Primary shard): 인덱스 데이터를 포함하는 원본 샤드입니다.
레플리카 샤드(Replica shard): 중복성과 검색 성능을 위한 프라이머리 샤드의 복사본입니다.
Doc values: 필드 값의 효율적인 정렬과 집계를 위한 온디스크 데이터 구조입니다.
역인덱스(Inverted index): 단어를 그 단어를 포함하는 문서에 매핑하는 데이터 구조입니다.
Lucene: OpenSearch가 데이터를 인덱싱하고 검색하는 데 사용하는 기본 검색 라이브러리입니다.
세그먼트(Segment): 샤드 내의 불변 데이터 저장 단위입니다.
수집(Ingestion): OpenSearch에 데이터를 추가하는 과정입니다.
인덱싱(Indexing): 데이터를 검색 가능하게 만들기 위해 OpenSearch에서 데이터를 저장하고 조직화하는 과정입니다.
일괄 인덱싱(Bulk indexing): 단일 요청으로 여러 문서를 인덱싱하는 과정입니다.
텍스트 분석(Text analysis): 문서의 구조화되지 않은 자유 텍스트 내용을 용어의 시퀀스로 분할한 다음 역인덱스에 저장하는 과정입니다.
분석기(Analyzer): 검색을 위해 텍스트를 처리하여 준비하는 구성 요소입니다. 분석기는 텍스트를 역인덱스에 저장되는 용어로 변환합니다.
토크나이저(Tokenizer): 텍스트를 개별 토큰(보통 단어)으로 분할하고 해당 위치에 대한 메타데이터를 기록하는 분석기의 구성 요소입니다.
토큰 필터(Token filter): 토큰화 후 토큰을 수정, 추가 또는 제거하는 분석기의 최종 구성 요소입니다. 예시로는 소문자 변환, 불용어 제거, 동의어 추가 등이 있습니다.
토큰(Token): 텍스트 분석 중에 토크나이저가 생성한 텍스트 단위입니다. 토큰은 토큰 필터에 의해 수정될 수 있으며 텍스트 분석 과정에서 사용되는 메타데이터를 포함합니다.
용어(Term): 역인덱스에 직접 저장되고 검색 작업 중 매칭에 사용되는 데이터 값입니다. 용어는 최소한의 관련 메타데이터를 가집니다.
문자 필터(Character filter): 토큰화 전에 문자를 추가, 제거 또는 수정하여 원본 텍스트를 처리하는 분석기의 첫 번째 구성 요소입니다.
정규화기(Normalizer): 토큰화 없이 텍스트를 처리하는 특별한 유형의 분석기입니다. 문자 수준 작업만 수행할 수 있으며 전체 토큰을 수정할 수 없습니다.
어간 추출(Stemming): 단어를 어간이라고 알려진 어근 또는 기본 형태로 줄이는 과정입니다.
쿼리(Query): 데이터에서 찾고 있는 것을 설명하는 OpenSearch에 대한 요청입니다.
쿼리 절(Query clause): 문서 매칭 기준을 지정하는 쿼리 내의 단일 조건입니다.
필터(Filter): 점수 계산 없이 정확한 일치를 찾는 쿼리 구성 요소입니다.
필터 컨텍스트(Filter context): 필터 컨텍스트의 쿼리 절은 "문서가 쿼리 절과 일치하는가?"라는 질문을 합니다.
쿼리 컨텍스트(Query context): 쿼리 컨텍스트의 쿼리 절은 "문서가 쿼리 절과 얼마나 잘 일치하는가?"라는 질문을 합니다.
전체 텍스트 검색(Full-text search): 단어 형태의 변형을 고려하여 텍스트 필드를 분석하고 매칭하는 검색입니다.
키워드 검색(Keyword search): 정확한 텍스트 일치를 요구하는 검색입니다.
쿼리 도메인 특화 언어(Query DSL): 복잡하고 사용자 정의 가능한 검색을 만들기 위한 OpenSearch의 주요 쿼리 언어입니다.
쿼리 문자열 쿼리 언어(Query string query language): URL 매개변수에서 사용할 수 있는 간소화된 쿼리 구문입니다.
대시보드 쿼리 언어(DQL): OpenSearch Dashboards에서 데이터 필터링을 위해 특별히 사용되는 간단한 텍스트 기반 쿼리 언어입니다.
파이프 처리 언어(PPL): 데이터 처리와 분석을 위해 명령을 연결하는 파이프 구문(|)을 사용하는 쿼리 언어입니다. 주로 OpenSearch의 관찰성 사용 사례에 사용됩니다.
관련성 점수(Relevance score): 문서가 쿼리와 얼마나 잘 일치하는지를 나타내는 숫자입니다.
집계(Aggregation): 검색 쿼리를 기반으로 데이터를 분석하고 요약하는 방법입니다.
벡터 검색 개념을 참조하세요.
다음 섹션에서는 더 고급 OpenSearch 개념을 설명합니다.
업데이트 작업의 생명주기는 다음 단계로 구성됩니다:
업데이트 수신: 업데이트가 프라이머리 샤드에 수신되고 샤드의 트랜잭션 로그(translog)에 기록됩니다. 트랜잭션 로그는 업데이트가 승인되기 전에 디스크로 플러시됩니다(fsync 뒤따름). 이는 내구성을 보장합니다.
메모리 버퍼링: 업데이트는 Lucene 인덱스 라이터에도 전달되어 인메모리 버퍼에 추가됩니다.
새로고침 작업: 새로고침 작업에서 Lucene 인덱스 라이터는 인메모리 버퍼를 디스크로 플러시하고(각 버퍼가 새로운 Lucene 세그먼트가 됨), 결과 세그먼트 파일에 대해 새로운 인덱스 리더가 열립니다. 이제 업데이트가 검색에서 보입니다.
플러시 작업: 플러시 작업에서 샤드는 Lucene 세그먼트를 fsync합니다. 세그먼트 파일이 업데이트의 지속적인 표현이므로 트랜잭션 로그는 더 이상 내구성을 제공할 필요가 없어 업데이트를 트랜잭션 로그에서 제거할 수 있습니다.
인덱싱 또는 일괄 호출은 문서가 트랜잭션 로그에 기록되고 트랜잭션 로그가 디스크로 플러시될 때 응답하므로 업데이트가 지속됩니다. 업데이트는 새로고침 작업 후까지 검색 요청에서 보이지 않습니다.
주기적으로 OpenSearch는 새로고침 작업을 수행하여 인메모리 Lucene 인덱스의 문서를 파일에 씁니다. fsync가 수행되지 않기 때문에 이러한 파일은 지속성이 보장되지 않습니다. 새로고침은 문서를 검색에서 사용할 수 있게 만듭니다.
플러시 작업은 fsync를 사용하여 파일을 디스크에 유지하여 내구성을 보장합니다. 플러시는 트랜잭션 로그에만 저장된 데이터가 Lucene 인덱스에 기록되도록 보장합니다. OpenSearch는 트랜잭션 로그가 너무 커지지 않도록 필요에 따라 플러시를 수행합니다.
OpenSearch에서 샤드는 세그먼트(또는 세그먼트 파일)로 구성된 Lucene 인덱스입니다. 세그먼트는 인덱싱된 데이터를 저장하며 불변입니다. 주기적으로 더 작은 세그먼트들이 더 큰 세그먼트로 병합됩니다. 병합은 각 샤드의 전체 세그먼트 수를 줄이고, 디스크 공간을 확보하며, 검색 성능을 향상시킵니다. 결국 세그먼트는 병합 정책에 지정된 최대 크기에 도달하고 더 이상 더 큰 세그먼트로 병합되지 않습니다. 병합 정책은 또한 병합이 얼마나 자주 수행되는지를 지정합니다.