Data Engineering/Distributed System

[OpenSearch] - 2. 텍스트 분석

cstory-bo 2024. 1. 6. 15:24

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

출처:  https://codingexplained.com/coding/elasticsearch/understanding-analysis-in-elasticsearch-analyzers

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 타입 필드는 설정한 분석기가 동작한다.