ElasticSearch 기본(3)

Mkim4·2024년 11월 4일

inverted index

문자열을 분석한 결과를 저장하고 있는 구조체

토큰

분석기 애널라이저를 통해서 생성해낸 것들을 토큰이라고 부른다.

애널라이저(Analyzer)

문자열 -> character filter -> tokenizer -> token filter -> tokens
문자열을 분석해서 inverted index 구성을 위한 토큰을 만들어내는 과정

검색 과정

검색어 분석 (= analyzer 적용)
-> inverted index 검색 (= 생성된 토큰을 inverted index에서 검색)
-> 검색 결과 표시

검색 요청은 프라이머리 샤드와 레플리카 샤드 모두가 처리할 수 있다.

검색 성능을 높이고 싶으면 레플리카 샤드를 더 늘려서 검색 성능을 높일 수 있다. 하지만 다큐멘트 라우팅이 바뀌기 때문에 넘버오브샤드는 바꿀 수 없다.
넘버오브레플리카는 다이나믹이기 때문에 운영 중에 언제든지 바꿀 수 있다.

애널라이저를 통해서 색인 과정에서 문자열을 분석하고 토큰들이 생성되며 이 토큰들이 inverted index를 구성합니다.
애널라이저를 통해 검색어로부터 생성된 토큰들을 inverted index에서 찾는 과정을 검색이라고 합니다.
검색 요청은 프라이머리 샤드와 레플리카 샤드 모두에서 처리될 수 있습니다.
색인과 검색 모두 적절한 샤드의 수가 성능을 결정하며, 적절한 샤드의 수가 클러스터로서의 이점을 활용하느냐 아니냐를 결정합니다.
ElasticSearch는 클러스터로 구성되기 때문에 모든 노드가 색인과 검색을 처리할 수 있도록 구성하는 것이 가장 중요합니다.

nori analzyzer 그래서 어떻게 쓰는데?

우선 Nori Analyzer 에는 'decompound_mode' 옵션이 있는데 한국어의 복합어를 어떻게 분해할 지 설정하는 역할임.
1. none : 복합어를 분해하지 않고 그대로 유지, 예를 들어 백두산이는 백두산+이로 분석되고 백두나 산 같은 분리검색은 불가능
2. discard : 기본값이고 복합어를 분해한다. 백두산이는 백두 + 산 + 이로 분해돼서 백두나 산으로도 검색할 수 있다. 백두산 전체로 검색되는지는 인덱싱과 검색 시점의 매핑 설정에 따라 달라질 수 있다.
3. mixed : 복합어를 분해하면서 원래 형태도 포함해. 백두산이는 백두산 + 백두 + 산+ 이로 분석돼서 모든 형태로 검색이 가능해

nested 타입은 뭐야?

nested 타입은 엘라스틱 서치에서 복잡한 객체 구조를 다루기 위해 제공하는 데이터 타입이야. 특히, 문서 안에 또 다른 문서가 있는 형태를 다룰 때 사용돼. 예를 들어, 주제별에 여러 하위 항목이 있을 때 nested 타입을 사용하면 각각의 하위 항목을 별도로 검색할 수 있게 관리할 수 있어.

왜 nested 타입을 사용하나?

보통 JSON 구조로 데이터를 넣을 때, 배열 형태의 객체가 있는 경우가 있어. 하지만 엘라스틱서치에서는 단순히 배열로 넣으면, 배열 안의 객체들이 독립적으로 검색되지 않아서 예상치 못한 검색 결과가 나올 수 있어. nested 타입을 사용하면, 배열 내의 각 객체를 개별적으로 처리해 정확한 검색을 보장할 수 있어.

profile
귀요미 개발자

0개의 댓글