opensearch의 핵심이라고도 할 수 있는 인덱싱과 검색에 대해 알아보려고 한다.
Text vs Keyword
이 둘의 차이는 분석과정의 유무이다.
text는 추가나 업데이트가 될 때마다 분석 과정을 거친 후 반영된다.
하지만 keyword는 따로 분석 과정 없이 텍스트 그대로 반영된다.
Text Analysis
Opensearch의 텍스트가 거치는 텍스트 분석은 분석기에 의해 수행된다.
이 분석기는 3가지 요소로 구성된다.
- Character filter
- 입력 받은 text에서 미리 설정한 룰에 따라 문자를 추가, 제거, 변경한다.
- 예) html 파일 내의 태그 제거
- Tokenizer
- 텍스트를 토큰으로 자른다. 이때 어떤 기준으로 자를지를 토크나이저 종류에 따라 선택할 수 있다.
- Standard 토크나이저는 유니코드 텍스트 분할 알고리즘을 사용하며 공백 기준으로 자르고 쉼표(,), 마침표(.), 세미콜론(;) 등의 기호를 제거한다.
- whitespace 토크나이저는 standard와 달리 기호를 제거하지 않고 공백 기준으로 자르기만 한다.
- 이 외에 다양한 토크나이저가 존재한다.
- Token Filter
- character filter와 다르게 토쿤 기준으로 필터링을 진행한다.
- 분리된 토큰들에 대해 토큰을 추가, 삭제, 변경할 수 있다.
- 예)
lowercase filter : 모든 문자를 소문자로 바꿔준다.
stop oken filter : 불용어를 제거한다.
텍스트 분석 process
OpenSearch 텍스트 분석 실제로 해보기
GET /_analyze API를 이용한다.
standard analyzer와 "Hello, world! text를 입력했더니 hello와 world로만 있는 2개의 토큰으로 결과가 나왔다.
배열로 여러 텍스트를 분석할 수 있다.
이번에는 uppercase 필터도 적용해보았다.
모든 문자가 대분자로 바뀐 것 을 알 수 있다. 소문자로 바꾸고 싶으면 lowercase filter를 사용하면 된다.
이번에는 character filter도 적용해보았다.
html strip 필터를 적용했더니 html 태그가 모두 제거되었다.
모든 text 타입 필드는 인덱싱 또는 검색할 때 standard 분석기를 기본으로 사용한다.
만약 바꾸고 싶다면 인덱스 매핑을 추가할 때 analyzer를 지정해주면 된다.
결과
새로운 필드에 대해서는 default 세팅인 standard filter가 작동한다.
인덱스 내 모든 text 타입 필도에 분석기를 설정할 수 있다.
이 인덱스 내 모든 text 타입 필드는 설정한 분석기가 동작한다.
'Data Engineering > Distributed System' 카테고리의 다른 글
[OpenSearch] - 4. 분산 아키텍처 & 각 노드 역할과 샤드 (0) | 2024.01.06 |
---|---|
[OpenSearch] - 3. Inverted Index ( 역인덱스 ) (1) | 2024.01.06 |
[OpenSearch] - 1. OpenSearch 구조와 동작방식 알아보기 & CRUD 등 여러 동작 실습하기 (2) | 2024.01.04 |
Zookeeper Cli & java API 사용하기 (0) | 2024.01.04 |
Zookeeper 여러 기능 알아보기 및 설치 (1) | 2024.01.04 |