JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] 자동 완성 기능

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
exercise-fuzzy-highlight-pagination
type
post
updatedAt
Dec 6, 2025 04:48 AM

✅ 요구사항 반영하기

상품명으로만 자동 완성이 되도록 해야 한다.
자동 완성 결과가 5개만 조회되도록 설정해야 한다.
 
  1. 자동 완성 기능 구현하기
    1. 자동 완성 기능을 구현하기 위해 search_as_you_type을 활용하자.
      DELETE /products PUT /products { "settings": { "analysis": { // 필터 정의 "filter": { "product_synonyms": { "type": "synonym", "synonyms": [ "samsung, 삼성", "apple, 애플", "노트북, 랩탑, 컴퓨터, computer, laptop, notebook", "전화기, 휴대폰, 핸드폰, 스마트폰, 휴대전화, phone, smartphone, mobile phone, cell phone", "아이폰, iphone", "맥북, 맥, macbook, mac" ] } }, // 커스텀 애널라이저 정의 "analyzer": { "products_name_analyzer": { "char_filter": [], "tokenizer": "nori_tokenizer", "filter": [ "nori_part_of_speech", "nori_readingform", "lowercase", "product_synonyms" ] }, "products_description_analyzer": { "char_filter": ["html_strip"], "tokenizer": "nori_tokenizer", "filter": [ "nori_part_of_speech", "nori_readingform", "lowercase" ] }, "products_category_analyzer": { "char_filter": [], "tokenizer": "nori_tokenizer", "filter": [ "nori_part_of_speech", "nori_readingform", "lowercase" ] } } } }, "mappings": { "properties": { "id": { "type": "long" }, "name": { "type": "text", // 유연한 검색 필요 "analyzer": "products_name_analyzer", // 멀티 필드로 search_as_you_type 타입을 추가 "fields": { "auto_complete": { "type": "search_as_you_type", "analyzer": "nori" } } }, "description": { "type": "text", // 유연한 검색 필요 "analyzer": "products_description_analyzer" }, "price": { "type": "integer" // 10억 이하의 정수 }, "rating": { "type": "double" // 실수(소수점을 가진 숫자 포함) }, "category": { "type": "text", // 유연한 검색 필요 "analyzer": "products_category_analyzer", // 멀티 필드로 keyword 타입을 추가 "fields": { "raw": { "type": "keyword" } } } } } }
       
      자동 완성 기능이 잘 구현됐는 지 테스트하기 위해 더미 데이터부터 넣자.
      POST /products/_doc { "id": 1, "name": "삼성 스마트 TV 65인치", "description": "<p>선명한 화질과 뛰어난 스마트 기능을 갖춘 삼성 TV입니다.</p>", "price": 4500, "rating": 4.6, "category": "가전제품" } POST /products/_doc { "id": 2, "name": "삼성 스마트 냉장고", "description": "<p>스마트 기능과 대용량 저장공간을 제공하는 삼성 냉장고입니다.</p>", "price": 5000, "rating": 4.7, "category": "가전제품" }
       
      자동 완성 기능이 잘 작동하는 지 아래 쿼리를 실행시켜보자.
      GET /products/_search { "query": { "multi_match": { "query": "삼", // 삼, 삼성, 삼성 스 "type": "bool_prefix", "fields": [ "name.auto_complete", "name.auto_complete._2gram", "name.auto_complete._3gram" ] } } } GET /products/_search { "query": { "multi_match": { "query": "스", // 스, 스마, 스마트 "type": "bool_prefix", "fields": [ "name.auto_complete", "name.auto_complete._2gram", "name.auto_complete._3gram" ] } } }
그리고 결과가 5개까지만 조회되도록 만들자.
POST /products/_search { "query": { "multi_match": { "query": "삼", // 삼, 삼성, 삼성 스 "type": "bool_prefix", "fields": [ "name.auto_complete", "name.auto_complete._2gram", "name.auto_complete._3gram" ] } }, "size": 5 }
 
👨🏻‍🏫
요구 사항에 있는 모든 사항을 다 반영시켰다. 다음 강의에서 지금까지 작성한 쿼리를 정리해보자.
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
type
series-footer
updatedAt
Dec 6, 2025 05:12 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.