Skip to content

tsseo/coupang-api-server

Repository files navigation

쿠팡 상품 검색 시스템 (Elasticsearch 실습 프로젝트)

프로젝트 개요

실전에서 바로 써먹는 Elasticsearch 입문 강의를 기반으로 한 상품 검색 시스템 실습 프로젝트입니다.

📋 요구사항

✅ 1. 다중 필드 검색 및 가중치 적용

  • 검색 시 상품명, 상품 설명, 카테고리명을 기반으로 관련 상품 검색
  • 각 필드별 검색 점수 가중치 설정:
    • 상품명: 3배 가중치
    • 상품 설명: 1배 가중치 (기본)
    • 카테고리명: 2배 가중치

✅ 2. 대소문자 구분 없는 검색

  • 사용자가 대문자/소문자 구분 없이 검색 가능
  • 예: "LG TV", "lg tv", "Lg Tv" 모두 동일한 결과 반환

✅ 3. 단어 순서 무관 검색

  • 단어의 순서에 상관없이 검색 결과 제공
  • 예: "삼성 노트북" ↔ "노트북 삼성" 동일한 결과

✅ 4. HTML 태그 필터링

  • 상품 설명에 포함된 HTML 태그는 검색 대상에서 제외
  • 실제 텍스트 내용만으로 검색 수행

✅ 5. 한글/영어 혼합 검색

  • 한글과 영어 모두 원활한 검색 지원
  • Nori 토크나이저를 통한 한국어 형태소 분석

✅ 6. 동의어 검색

  • 상품명에 대한 동의어 인식 기능
  • 예: samsung ↔ 삼성, laptop ↔ 노트북 ↔ 랩탑 ↔ 컴퓨터

✅ 7. 카테고리 및 가격 필터링

  • 특정 카테고리 내에서만 검색 가능
  • 특정 가격 범위 내에서만 검색 가능
  • Bool 쿼리를 통한 복합 조건 검색

✅ 8. 평점 기반 우선순위

  • 평점 4.0 이상 상품을 상위에 노출
  • Should 절을 통한 점수 부스팅

✅ 9. 오타 허용 검색 (Fuzziness)

  • 검색어에 오타가 있어도 유사한 상품 검색
  • 예: "simsung" → "samsung" 자동 보정

✅ 10. 검색 결과 하이라이트

  • 검색 키워드가 매치된 부분 <b> 태그로 강조
  • 사용자가 매치된 부분을 쉽게 식별 가능

✅ 11. 페이지네이션

  • 검색 결과를 5개씩 페이지 단위로 조회
  • from, size 파라미터 활용

✅ 12. 자동완성 기능

  • 상품명 기반 실시간 자동완성 검색
  • 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

🚀 실행 방법

1. MySQL 데이터베이스 실행

docker-compose up -d

2. 데이터베이스 연결 정보

  • JDBC URL: jdbc:mysql://localhost:3306/coupang
  • Username: coupang
  • Password: coupang123
  • Root Password: root

3. Elasticsearch 설정

  1. docs/elasticsearch/products-index.md - 기본 인덱스 생성 및 Multi-match 검색
  2. docs/elasticsearch/html-analyzer.md - HTML 태그 필터링을 위한 커스텀 analyzer
  3. docs/elasticsearch/korean-synonyms-filtering.md - 한글/영어 혼합 검색, 동의어, Bool 쿼리 필터링
  4. docs/elasticsearch/fuzziness-highlight-pagination.md - 오타 허용, 하이라이트, 페이지네이션
  5. 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 쿼리 타입

About

실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 학습 정리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published