pile·
백엔드·LINE EngineeringLINE Engineering·

일본어 상품 검색 정확도 높이기: Elasticsearch + Kuromoji에서 OpenSearch + Sudachi로

LINE Plus의 통합 커머스 프로젝트에서 일본어 상품 검색 엔진을 Elasticsearch + Kuromoji에서 OpenSearch + Sudachi로 전환한 사례다. 신조어·복합어 미인식과 모델번호 표기 다양성 문제를 해결하기 위해 형태소 분석기를 교체하고 멀티 필드 전략을 설계했다.

핵심 포인트
  • Kuromoji(IPADIC 2007년 사전)는 신조어·복합어를 과도 분해해 'スマートフォンケース'를 4개 토큰으로 쪼갰다. Sudachi C 모드는 의미 단위로 유지해 2개로 처리한다.
  • OpenSearch 2.15.0이 Sudachi를 공식 지원해 EOL 예정이던 Elasticsearch 7.10.2와 함께 인프라도 교체했다.
  • 모델번호 표기 다양성('AW-10DP3', 'AW_10DP3', 'aw10dp3')을 compact_product_name_analyzer로 동일 토큰으로 수렴시켰다.
  • 상품 인덱스(8억 건)에는 인덱스 크기 위험으로 Edge N-gram을 미적용하고, 카탈로그 인덱스(1억 건)에만 적용해 자동완성을 지원한다.
  • 검색 모드를 인덱스별·목적별로 분리했다: 상품 인덱스는 PARTIAL/PHRASE_EXACT_LIKE/EXACT, 카탈로그는 PHRASE/MATCH/EDGE/EXACT.
상세 정리
  • 문제 발단: 특정 단어로 검색하면 결과가 없다는 보고. 사용자 사전 수동 추가로 임시 대응했으나 신조어·복합어가 지속 발생해 근본 해결이 필요했다.
  • Kuromoji 한계: IPADIC 2007년 8월 버전이라 최신 IT 용어·제품명을 미포함. 2001년 등록된 쌀 품종 'こしいぶき'도 미인식. 기본 설정 그대로 사용해 상품명 특성에 맞는 튜닝이 없었다.
  • Sudachi 선택: C 모드로 복합어를 의미 단위 유지, 최신 사전 기반, OpenSearch 2.6+ 공식 지원. Elasticsearch EOL과 함께 OpenSearch 2.15.0으로 전환.
  • 멀티 필드 설계: 기본 필드에 sudachi_analyzer 적용. 서브 필드로 keyword(단일 토큰 정규화), compact(모델번호용), edge(자동완성용)를 추가해 검색 목적에 맞게 쿼리 라우팅.
  • compact_product_name_analyzer: icu_normalizer → 구분자(하이픈/언더스코어/슬래시/나카구로) 공백 변환 → whitespace tokenizer. 형태소 분석 없이 규칙 기반으로 'AW-10DP3'와 'aw10dp3'를 동일 토큰으로 수렴. 영숫자 포함 + 길이 3 초과 시에만 활성화해 단어 짧은 검색에서 노이즈 방지.
  • Edge N-gram: min=2~max=10으로 "スマートフォン"을 6개 토큰 생성. constant_score로 스코어링 생략해 응답 속도 향상. 8억 건 상품 인덱스는 토큰 수 폭증으로 미적용, 정제 데이터인 카탈로그(1억 건)에만 적용.
  • 검색 쿼리 설계: 상품 인덱스 PARTIAL 모드는 sudachi 필드 + compact 필드 bool.should 조합. 카탈로그 PHRASE 모드는 match_phrase + edge 보조.
  • 성과: 복합어 처리 개선(4개→2개 토큰), 신조어 인식, 모델번호 표기 통일, 자동완성 구현. 현재 실서비스 운영 중이며 검색 로그 분석과 모드별 패턴 모니터링으로 지속 개선 예정.
왜 읽나다국어(특히 일본어) 검색 품질 개선이나 Kuromoji→Sudachi 전환을 검토 중인 백엔드·검색 엔지니어에게 분석기 선택 기준과 멀티 필드 전략의 실전 구현 레퍼런스를 제공한다.
LINE Engineering
LINE Engineering 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    WebFlux 전환 부하 테스트를 다시 쓴 이야기

    여기어때 유저혜택개발팀이 이벤트 쿠폰 API를 Tomcat/JPA 기반 blocking 방식에서 WebFlux/R2DBC 기반 reactive 방식으로 전환하며 수행한 부하 테스트 기록이다. 초기에는 reactive가 4배 빠르다는 결론이 나왔지만, 측정 환경의 교란 요인을 하나씩 제거하자 결론이 완전히 뒤집혔다.

    요약 이어보기
    #redis#spring-boot#load-testing+2
  2. 백엔드·여기어때 (GC컴퍼니)여기어때 (GC컴퍼니)·

    NPE 하나를 팀의 방어 체계로 바꾸기까지

    여기어때 유저혜택개발팀에서 운영 환경 NPE를 원인 추적하다 코드 구조적 결함을 발견하고, 개발자 실수가 아닌 타입과 도메인 설계 수준에서 원천 차단하는 방법으로 전환한 과정을 다룬다. 나아가 Claude Code 기반 AI 에이전트 파이프라인에 장애 교훈을 자동화 체크리스트로 녹이는 방법까지 이어진다.

    요약 이어보기
    #java#null-safety#domain-driven-design+2