엘라스틱 서치(Elasticsearch)와 검색 자동 완성 문제 해결

1. 문제 발생

엘라스틱 서치를 이용해 검색 자동 완성 기능을 구현했지만, 일부 검색어가 정상적으로 인식되지 않는 문제가 발생했다. 검색어에 따라 자동 완성이 예상과 다르게 작동하며, 특정 단어가 검색되지 않는 경우도 있었다.

 

2. 문제 원인

  • 엘라스틱 서치에서 기본적으로 제공하는 Nori 형태소 분석기는 완벽한 형태소 분석을 수행하지 않는다.
  • 예를 들어, "용광로"라는 단어가 있을 때, Nori는 이를 다음과 같이 토큰화할 수 있다.
{
  "tokens": [
    { "token": "용", "start_offset": 0, "end_offset": 1, "type": "word", "position": 0 },
    { "token": "왕식", "start_offset": 1, "end_offset": 3, "type": "word", "position": 1 },
    { "token": "용광로", "start_offset": 4, "end_offset": 7, "type": "word", "position": 2 }
  ]
}
  • 이러한 방식은 공백 및 사전 단어를 기준으로 최선의 토큰화를 수행하기 때문에, 원하는 자동 완성 결과를 보장하지 않는다.
  • 신조어나 외래어, 대명사를 제대로 구분하지 못하는 경우도 발생하여, 일부 검색어가 정상적으로 처리되지 않는 문제가 있었다.

 

3. 문제 해결책 수립

해결 방법 비교

해결 방법 설명 장점 단점
AI 기반 형태소 분석기 구축 AI 모델을 학습시켜 최적화된 형태소 분석 수행 가장 정확한 분석 가능 높은 비용과 긴 개발 기간 필요
유료 형태소 분석 API 사용 신뢰할 수 있는 형태소 분석 API를 활용 별도 개발 필요 없음 API 사용료 부담
다른 형태소 분석기 추가 Nori 외에 N-gram 등의 분석기를 병행 사용 구현 난이도 적당, 검색 품질 향상 최적화 과정 필요

 

4. 문제 해결: Nori + Edge-N-gram 조합 사용

현 프로젝트에서는 비용과 개발 시간을 고려하여 Nori 형태소 분석기와 Edge-N-gram을 조합하는 방식을 선택했다.

  • Edge-N-gram을 사용하여 자동 완성 기능을 보완
    • 예를 들어, "용광로"라는 단어가 있다면, Edge-N-gram을 적용했을 때 다음과 같이 인덱싱할 수 있다.
      ["용", "용광", "용광로"]
      
    • 이를 통해 사용자가 "용"을 입력해도 "용광로"가 자동 완성될 수 있도록 함.
  • Nori 형태소 분석기를 그대로 유지하여 의미 기반 검색 가능
    • 단순한 완전 일치 검색이 아니라, 문맥을 고려한 검색이 가능하도록 유지

결론: 엘라스틱 서치의 기본 형태소 분석기인 Nori만으로는 검색 자동 완성 기능을 완벽히 구현하기 어렵다. 따라서, 자동 완성을 위해 Edge-N-gram을 적용하고, 의미 기반 검색을 위해 Nori 형태소 분석기를 함께 활용하는 방식으로 해결했다.

+ Recent posts