피드로 돌아가기
Building Typo-Tolerant Multi-Language Video Search with OpenSearch and PHP
Dev.toDev.to
Database

OpenSearch 도입으로 Zero-result Rate 19%에서 4%로 개선

Building Typo-Tolerant Multi-Language Video Search with OpenSearch and PHP

ahmet gedik2026년 6월 3일16intermediate

Context

SQLite FTS5 기반의 CJK Tokenizer 구조로 인해 오타 대응 및 다국어 검색 정밀도 저하 문제 발생. 단순 Substring 매칭의 한계로 인해 'blakpink'와 같은 Typo 검색 시 결과가 전무한 아키텍처적 제약 존재.

Technical Solution

  • Edit Distance 기반의 Fuzzy Search 지원을 위해 SQLite FTS5에서 OpenSearch로 검색 엔진 마이그레이션
  • 단일 인덱스 내 다국어 처리를 위한 Multi-fields 패턴 채택 및 multi_match 쿼리를 통한 최적 매칭 결과 도출
  • ICU Analysis Plugin 및 icu_folding 필터를 적용하여 베트남어 Diacritic 제거와 Latin Fullwidth 정규화 구현
  • CJK 언어의 형태소 분석 부담을 줄이기 위해 Morphological Dictionary 대신 cjk_bigram 필터 기반의 Bigram 인덱싱 전략 적용
  • 검색 시 쿼리 팽창 및 Relevance Scoring 왜곡을 방지하기 위해 Indexing용 edge_ngram과 Search용 standard 분석기를 분리 설계
  • 저사양 LiteSpeed 호스트 환경의 Heap Pressure 관리를 위해 Single-node 배치 및 Replica 수를 0으로 설정하여 리소스 최적화

1. 다국어 검색 시 언어별 분석기 라우팅 대신 Multi-fields 패턴 검토

2. Edge N-gram 적용 시 Index analyzer와 Search analyzer를 분리하여 스코어링 정확도 확보

3. 단일 노드 OpenSearch 배포 시 Health-check 오류 방지를 위해 `number_of_replicas: 0` 설정 확인

4. 외부 검색 엔진 도입 시 PHP Worker 보호를 위한 Circuit Breaker 패턴 구현

원문 읽기