문자열을 분석한 결과를 저장하고 있는 구조체
분석기 애널라이저를 통해서 생성해낸 것들을 토큰이라고 부른다.
문자열 -> character filter -> tokenizer -> token filter -> tokens
문자열을 분석해서 inverted index 구성을 위한 토큰을 만들어내는 과정
검색어 분석 (= analyzer 적용)
-> inverted index 검색 (= 생성된 토큰을 inverted index에서 검색)
-> 검색 결과 표시
검색 요청은 프라이머리 샤드와 레플리카 샤드 모두가 처리할 수 있다.
검색 성능을 높이고 싶으면 레플리카 샤드를 더 늘려서 검색 성능을 높일 수 있다. 하지만 다큐멘트 라우팅이 바뀌기 때문에 넘버오브샤드는 바꿀 수 없다.
넘버오브레플리카는 다이나믹이기 때문에 운영 중에 언제든지 바꿀 수 있다.
애널라이저를 통해서 색인 과정에서 문자열을 분석하고 토큰들이 생성되며 이 토큰들이 inverted index를 구성합니다.
애널라이저를 통해 검색어로부터 생성된 토큰들을 inverted index에서 찾는 과정을 검색이라고 합니다.
검색 요청은 프라이머리 샤드와 레플리카 샤드 모두에서 처리될 수 있습니다.
색인과 검색 모두 적절한 샤드의 수가 성능을 결정하며, 적절한 샤드의 수가 클러스터로서의 이점을 활용하느냐 아니냐를 결정합니다.
ElasticSearch는 클러스터로 구성되기 때문에 모든 노드가 색인과 검색을 처리할 수 있도록 구성하는 것이 가장 중요합니다.
우선 Nori Analyzer 에는 'decompound_mode' 옵션이 있는데 한국어의 복합어를 어떻게 분해할 지 설정하는 역할임.
1. none : 복합어를 분해하지 않고 그대로 유지, 예를 들어 백두산이는 백두산+이로 분석되고 백두나 산 같은 분리검색은 불가능
2. discard : 기본값이고 복합어를 분해한다. 백두산이는 백두 + 산 + 이로 분해돼서 백두나 산으로도 검색할 수 있다. 백두산 전체로 검색되는지는 인덱싱과 검색 시점의 매핑 설정에 따라 달라질 수 있다.
3. mixed : 복합어를 분해하면서 원래 형태도 포함해. 백두산이는 백두산 + 백두 + 산+ 이로 분석돼서 모든 형태로 검색이 가능해
nested 타입은 엘라스틱 서치에서 복잡한 객체 구조를 다루기 위해 제공하는 데이터 타입이야. 특히, 문서 안에 또 다른 문서가 있는 형태를 다룰 때 사용돼. 예를 들어, 주제별에 여러 하위 항목이 있을 때 nested 타입을 사용하면 각각의 하위 항목을 별도로 검색할 수 있게 관리할 수 있어.
보통 JSON 구조로 데이터를 넣을 때, 배열 형태의 객체가 있는 경우가 있어. 하지만 엘라스틱서치에서는 단순히 배열로 넣으면, 배열 안의 객체들이 독립적으로 검색되지 않아서 예상치 못한 검색 결과가 나올 수 있어. nested 타입을 사용하면, 배열 내의 각 객체를 개별적으로 처리해 정확한 검색을 보장할 수 있어.