피드로 돌아가기
Dev.toDatabase
원문 읽기
OpenSearch 도입으로 Zero-result Rate 19%에서 4%로 개선
Building Typo-Tolerant Multi-Language Video Search with OpenSearch and PHP
AI 요약
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 패턴 구현