색인(indexing)
간단한 색인 과정
- 인덱스 존재 여부 판단 (없으면 생성)
- 매핑 정보 존재 여부 판단 (없으면 동적매핑)
- 매핑 올바른지 판단(type등 문제 있을경우 에러 발생)
- inverted index 생성
- 프라이머리 샤드에 저장
- 레플리카 샤드에 복사
색인 성능과 샤드 갯수
- 색인 성능을 위해서는 클러스터로서의 이점을 살리고 있는지 확인
- 클러스터의 이점을 살리기 위해서는 적절한 노드 갯수, 성능 및 샤드 갯수 중요
- 처음부터 완벽하게 샤드를 배치할 수는 없음
- 샤드 갯수를 최적화한 후, 노드에 대한 Scale-up & Scale-out
inverted index : 문자열을 분석한 결과를 저장하고 있는 구조체
간단한 검색 과정
- 검색어 분석 (analyzer 적용해서 토큰 생성)
- inverted index 검색 (생성된 토큰을 inverted index에서 검색)
- 검색 결과 표시
Analyzer의 토큰 생성 과정
- 문자열 입력
- character filter : 특수문자 제거 등 필터링 과정
- tokenizer : 공백 등 특정 기준을 바탕으로 tokenize
- token filter : 대소문자 처리 등 추가 필터링
주의 사항
- 색인 : primary shard에서만 가능
- 검색 : primary & replica 둘 다 가능
text와 keyword
- text : 전문 검색(Full-text search)을 위해 토큰 생성
- ex) "Hello world" 에 대해 "Hello", "World"로 두 개 토큰 생성
- keyword : Exact Matching
- ex) "Hello world" 에 대해 "Hello world"라는 하나의 토큰 생성
- 쪼개는 과정이 없어 색인 속도가 빠름
문자열 필드는 동적 매핑되면 keyword, text 타입 두 개 모두 생성