실전에서 바로 써먹는 Elasticsearch 입문 강의를 기반으로 한 상품 검색 시스템 실습 프로젝트입니다.
- 검색 시 상품명, 상품 설명, 카테고리명을 기반으로 관련 상품 검색
- 각 필드별 검색 점수 가중치 설정:
- 상품명: 3배 가중치
- 상품 설명: 1배 가중치 (기본)
- 카테고리명: 2배 가중치
- 사용자가 대문자/소문자 구분 없이 검색 가능
- 예: "LG TV", "lg tv", "Lg Tv" 모두 동일한 결과 반환
- 단어의 순서에 상관없이 검색 결과 제공
- 예: "삼성 노트북" ↔ "노트북 삼성" 동일한 결과
- 상품 설명에 포함된 HTML 태그는 검색 대상에서 제외
- 실제 텍스트 내용만으로 검색 수행
- 한글과 영어 모두 원활한 검색 지원
- Nori 토크나이저를 통한 한국어 형태소 분석
- 상품명에 대한 동의어 인식 기능
- 예: samsung ↔ 삼성, laptop ↔ 노트북 ↔ 랩탑 ↔ 컴퓨터
- 특정 카테고리 내에서만 검색 가능
- 특정 가격 범위 내에서만 검색 가능
- Bool 쿼리를 통한 복합 조건 검색
- 평점 4.0 이상 상품을 상위에 노출
- Should 절을 통한 점수 부스팅
- 검색어에 오타가 있어도 유사한 상품 검색
- 예: "simsung" → "samsung" 자동 보정
- 검색 키워드가 매치된 부분
<b>태그로 강조 - 사용자가 매치된 부분을 쉽게 식별 가능
- 검색 결과를 5개씩 페이지 단위로 조회
- from, size 파라미터 활용
- 상품명 기반 실시간 자동완성 검색
- search_as_you_type 필드 타입 활용
- n-gram 기반 부분 매칭 지원
- 자동완성 결과 5개로 제한
- Backend: Spring Boot + Gradle
- Database: MySQL 8.0 (Docker)
- Search Engine: Elasticsearch
- Container: Docker Compose
elasticsearch-coupang-project-main/
├── docs/
│ └── elasticsearch/ # Elasticsearch 명령어 및 매핑 정의
├── src/ # Spring Boot 소스 코드
├── docker-compose.yml # MySQL 데이터베이스 설정
└── README.md
docker-compose up -d- JDBC URL:
jdbc:mysql://localhost:3306/coupang - Username: coupang
- Password: coupang123
- Root Password: root
docs/elasticsearch/products-index.md- 기본 인덱스 생성 및 Multi-match 검색docs/elasticsearch/html-analyzer.md- HTML 태그 필터링을 위한 커스텀 analyzerdocs/elasticsearch/korean-synonyms-filtering.md- 한글/영어 혼합 검색, 동의어, Bool 쿼리 필터링docs/elasticsearch/fuzziness-highlight-pagination.md- 오타 허용, 하이라이트, 페이지네이션docs/elasticsearch/autocomplete.md- 자동완성 검색 (Search-As-You-Type)
- 기본 Multi-match 검색 (가중치 적용)
- HTML 태그 필터링 커스텀 analyzer
- 기본 analyzer 구성 요소 분석
- char_filter, tokenizer, filter 이해
- 한글/영어 혼합 검색 (Nori tokenizer)
- 동의어 필터 설정
- Bool 쿼리와 필터링 (카테고리/가격)
- Fuzziness 오타 허용 검색
- 평점 기반 우선순위 (Should 절)
- 검색 결과 하이라이트
- 페이지네이션 (from/size)
- 자동완성 검색 (search_as_you_type)
- N-gram 기반 부분 매칭
- Bool_prefix 쿼리 타입