개발 환경
node.js
express
MySQL, Sequelize, Sequelize.Op
문제 상태
searchAllProducts = async (term) => {
console.log('여긴 레포지토리, 검색한 키워드는?', term);
const searchdata = await this.productModel.findAll({
where: { product_name: { [Op.like]: '%' + term + '%' } }
});
};
return searchdata;
상품을 조회하는 검색 기능을 구현했다.
하지만 상품명(product_name)만 불러오고 있기 때문에, 검색량이 적었다.
가령, 마카롱은 상품명을 영어로 작성했기 때문에
'마카롱'을 한글로 검색하면
당연히 macaron으로 상품명이 등록된 마카롱이 조회가 되지 않는다.
시도
조회하려는 상품에 대하여 더 많은 컬럼을 조회할 수 있게 하면
원하는 상품을 검색할 수 있을 것 같았다.
해법 및 알게 된 점
하지만 sequelize 문법과 Op 객체 활용에 대해 제대로 알지 못했는데,
[Op.or]객체 을 활용하면 된다는 것을 알게 되었다
이에 따라 상품 설명(product_detail)도 조회되게 기능을 추가하였다.
비교
where : { product_name: { [Op.like]: '%' + term + '%' } }
- 상품명만 findAll
where : { [Op.or] : [ { product_name: { [Op.like]: '%' + term + '%' } }, { product_detail: { [Op.like]: '%' + term + '%' } } ] }
- 상품명과 상품 설명을 함께 findAll
변동된 코드는 다음과 같다.
searchAllProducts = async (term) => {
console.log('여긴 레포지토리, 검색한 키워드는?', term);
const searchdata = await this.productModel.findAll({
where: {
[Op.or]: [
{ product_name: { [Op.like]: '%' + term + '%' } },
{ product_detail: { [Op.like]: '%' + term + '%' } }
],
},
});
return searchdata;
};
}
상품 설명 데이터를 검색 기능이 추가되어서
만약 상품 설명에 한글로 마카롱이 포함되어있다면 해당 상품을 조회할 수 있게 되었다.
+
문제 상태 부분의 이미지에 함께 보였던 Macarons (뚱카롱) 상품은 조회되지 않는다.
상품 설명에 '마카롱'이 기재되지 않았기 때문에, '마카롱'을 검색하면 당연히 나오질 않는다.
- '카롱'을 검색하면 함께 나온다
유저가 상품의 검색을 하기 위해 어떤 키워드를 사용할지 모르는데, 결과를 충분히 조회할 수 하기 위해서 상품 등록시 키워드도 기입하는 컬럼도 추가하면 어떨까 싶다.
검색 기능은 처음이라서, 어떤 알고리즘을 사용하면 좋을지 앞으로 탐색하는 것이 과제가 될 것이다.
댓글