상품명, 상품 설명, 카테고리명을 기반으로 관련된 상품을 검색해야 한다.
(상품명 : 상품 설명 : 카테고리명의 score 가중치를 3 : 1 : 2로 설정하기)coupang이라는 데이터베이스가 만들어져 있어야 한다. 그리고 로컬 환경에 설치된 MySQL의 username과 password에 맞게 application.yml 파일을 수정해야 한다. spring: datasource: url: jdbc:mysql://localhost:3306/coupang username: root password: password123 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true

@Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Column(columnDefinition = "TEXT") private String description; // 에디터가 HTML로 상품 설명을 저장 private int price; private double rating; private String category; ... }
DELETE /products PUT /products { "mappings": { "properties": { "id": { "type": "long" }, "name": { "type": "text" // 유연한 검색 필요 }, "description": { "type": "text" // 유연한 검색 필요 }, "price": { "type": "integer" // 10억 이하의 정수 }, "rating": { "type": "double" // 실수(소수점을 가진 숫자 포함) }, "category": { "type": "text" // 유연한 검색 필요 } } } } GET /products
상품명, 상품 설명, 카테고리명을 기반으로 관련된 상품을 검색하기 위해 name, description, category를 text 타입으로 매핑했다.POST /products/_doc { "id": 1, "name": "lg tv", "description": "", "price": 10000, "rating": 5.0, "category": "" } POST /products/_doc { "id": 2, "name": "", "description": "lg tv", "price": 10000, "rating": 5.0, "category": "" } POST /products/_doc { "id": 3, "name": "", "description": "", "price": 10000, "rating": 5.0, "category": "lg tv" }
GET /products/_search { "query": { "multi_match": { "query": "lg", "fields": [ "name^3", "description^1", "category^2" ] } } }
상품명(name), 상품 설명(description), 카테고리(category)에 포함된 키워드로 검색하더라도 검색이 잘 되는 걸 확인할 수 있다.