ElasticSearch ‐ 한글 최적화 검색 기능 개발 - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 한글 최적화 검색 기능을 개발하고 싶다면?

  • 영어는 띄어쓰기로 단어가 명확하게 구분되다보니 standard tokenizer(공백 또는 ,, ., !, ?와 같은 문장 부호를 기준으로 자름)로도 잘 나눌 수 있다.
  • 허나 한국어는 조사(-는, -를), 어미(-다, -해요)를 붙여서 쓰는 말이 많다. 그리고 띄어쓰기가 비교적 자유롭다. 그러다보니 standard tokenizer로 단어를 나눠보면 제대로 잘 나누지 못하는 문제가 생긴다.
  • 이 문제를 해결하려면 한글에 맞는 전용 Analyzer인 Nori(노리) Analyzer를 써야 한다.

📚 Nori Analyzer

  • 한글 최적화 검색 기능을 개발하기 위해서는 별도의 플러그인이 필요하다.
  • 참고
FROM docker.elastic.co/elasticsearch/elasticsearch:8.17.4 

# Nori Analyzer 플러그인 설치
RUN bin/elasticsearch-plugin install analysis-nori 
services:
  elastic:
    build:
      context: .
      dockerfile: Dockerfile 
    ports:
      - 9200:9200 # 9200번 포트에서 Elasticsearch 실행
    environment:
      # 아래 설정은 개발/테스트 환경에서 간단하게 테스트하기 위한 옵션 (운영 환경에서는 설정하면 안 됨)
      - discovery.type=single-node # 단일 노드 (지금은 알 필요 없음)
      - xpack.security.enabled=false # 보안 설정
      - xpack.security.http.ssl.enabled=false # 보안 설정
  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.4 # 8.17.4 버전
    ports:
      - 5601:5601 # 5601번 포트에서 kibana 실행
    environment:
      - ELASTICSEARCH_HOSTS=http://elastic:9200 # kibana에게 통신할 Elasticsearch 주소 알려주기

📚 한글과 영어가 혼용된 문장에서의 검색 기능 개발

  • 한글(korean)과 영어(english)가 섞여있는 글이라면 Nori Analyzer를 활용하면 된다. 거기서 필드 값의 특징에 따라 character filter나 token filter를 추가해서 사용하면 된다.

❗ElasticSearch에서 특정 필드에 사용할 분석기를 지정하기 위해 일반적으로 인덱스 생성 시 설정(Settings) 및 매핑(Mapping)에서 정의한다.