아이콘 추가
커버 추가
레이아웃 사용자 지정
섹션 3: Elasticsearch를 사용한 검색
속성 추가
댓글
퍼지 쿼리
오타 처리하는 방법
퍼지 매치 기술 활용
편집 알고리즘 사용
Levenshtein 편집 거리 개념, 허용값 설정 가능
부분 매치
와일드 카드 활용
증분 매치 (자동 완성)
쿼리 타임 증분 검색 방식
가장 성능이 좋거나 최선의 방식은 아님
"Query-Time Search-As You-Type"의 단점: 색인 기반 솔루션에 비해 리소스 많이 사용됨
구글처럼 대규모로 사용할 예정이면 인덱스-시간 솔루션이 꼭 필요함
N-그램 개념
Search As You Type: 입력값을 N-그램으로 취급
색인에 매치해 어떤 용어와 일치하는지 확인 가능
Edge NGram 활용
인덱스/쿼리 분석기 분리
쿼리 측에서는 표준 분석기 지정, 인덱스 측에서는 자동완성 분석기만 사용
이유:
일반 검색: 정확한 결과 매칭을 위해 완전한 단어 토큰화 필요. 표준 분석기는 텍스트를 의미 있는 단어로 토큰화하고 불용어 제거 등의 처리 수행
자동완성: 사용자가 입력 중인 단어의 일부만으로도 결과 제공 필요. 접두사 매칭이나 n-gram 기반 토큰화 사용
토큰화 방식 차이 예시:
Plain Text
복사
캡션
"Quick brown fox"라는 텍스트가 있을 때: 표준 분석기: ["quick", "brown", "fox"] 자동완성 분석기: ["q", "qu", "qui", "quic", "quick", "b", "br", "bro", "brow", "brown", ...]
문제 해결책
같은 필드에 두 기능을 모두 적용하면, 하나의 분석기만 사용할 경우 둘 중 하나의 기능이 최적화되지 않음
Elasticsearch의 특성을 활용해 인덱싱 시와 검색 시 서로 다른 분석기 사용
analyzer와 search_analyzer를 분리하여 설정함으로써 각 사용 케이스에 최적화된 토큰화 전략 적용
NGram을 구축하기 위해 인덱스 측에서 별도의 분석기 사용해야 하는 방식
주의사항
증분 검색 자동완성에 필요한 속도로 빈번한 텍스트 쿼리를 실행하는 자동완성 기능은 대규모 시스템에 과부하를 줄 수 있음
선언된 각 증분 검색 필드마다 추가로 세 개의 하위 필드가 생성됨
도구
JQ 명령줄 도구
sudo apt-get install jq 명령으로 설치