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

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

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

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

[실습] 특정 조건 상위 노출 / 오타 허용 검색 / 하이라이팅 처리 / 페이지네이션

JSCODE 박재성
JSCODE 박재성
1970. 01. 01.
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025 04:21 AM
isPublic
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
exercise-filtering-and-scoring
type
post
updatedAt

✅ 요구사항 반영하기

되도록이면 검색 결과 중 평점이 4.0이 넘는 상품을 상위에 노출시킬 수 있도록 한다.
검색어에 어느 정도 오타가 있더라도 유사한 상품을 조회할 수 있어야 한다.
  • ex) samsung notebook이라는 상품을 simsung notebook이라고 검색해도 조회가 돼야 한다.
상품명에서 일치하는 검색 키워드는 하이라이팅 처리( <b></b>)를 해야 한다.
상품이 5개씩 조회되도록 페이지네이션 해야 한다.
 
  1. 되도록이면 평점이 4.0이 넘는 상품을 상위 노출 시키기
    1. 이 기능을 구현하기 위해서는 bool 쿼리의 should를 활용하면 된다.
      GET /products/_search { "query": { "bool": { "must": { "multi_match": { "query": "LG 냉장고", "fields": [ "name^3", "description^1", "category^2" ] } }, "filter": [ { "term": { "category.raw": "가전제품" } }, { "range": { "price": { "gte": 10000, "lte": 50000 } } } ], "should": [ { "range": { "rating": { "gt": 4.0 } } } ] } } }
       
  1. 어느 정도 오타가 있더라도 검색되게 만들기
    1. 어느 정도 오타가 있더라도 검색이 되게 만드려면 fuziness를 활용하면 된다.
      GET /products/_search { "query": { "bool": { "must": { "multi_match": { "query": "마전제품", "fields": [ "name^3", "description^1", "category^2" ], "fuzziness": "AUTO" } }, "filter": [ { "term": { "category.raw": "가전제품" } }, { "range": { "price": { "gte": 10000, "lte": 50000 } } } ], "should": [ { "range": { "rating": { "gt": 4.0 } } } ] } } }
       
  1. 상품명에서 일치하는 검색 키워드는 하이라이팅 처리( <b></b>) 하기
    1. GET /products/_search { "query": { "bool": { "must": { "multi_match": { "query": "삼성", "fields": [ "name^3", "description^1", "category^2" ], "fuzziness": "AUTO" } }, "filter": [ { "term": { "category.raw": "가전제품" } }, { "range": { "price": { "gte": 10000, "lte": 50000 } } } ], "should": [ { "range": { "rating": { "gt": 4.0 } } } ] } }, "highlight": { "fields": { "name": { "pre_tags": ["<b>"], "post_tags": ["</b>"] } } } }
 
  1. 상품이 5개씩 조회되도록 페이지네이션 처리하기
    1. GET /products/_search { "query": { "bool": { "must": { "multi_match": { "query": "삼성", "fields": [ "name^3", "description^1", "category^2" ], "fuzziness": "AUTO" } }, "filter": [ { "term": { "category.raw": "가전제품" } }, { "range": { "price": { "gte": 10000, "lte": 50000 } } } ], "should": [ { "range": { "rating": { "gt": 4.0 } } } ] } }, "highlight": { "fields": { "name": { "pre_tags": ["<b>"], "post_tags": ["</b>"] } } }, "from": 0, // 몇 번째 데이터부터 조회할 건지 = (페이지 번호 - 1) x size "size": 5 // 페이지당 몇 개의 데이터를 조회할 지 }
 
 
👨🏻‍🏫
검색 기능의 요구 사항을 전부 만족시켰다. 그럼 다음 기능인 자동 완성 기능의 요구사항을 만족시켜보자.
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025 03:54 AM
isPublic
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
type
series-footer
updatedAt
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.