카테고리 없음

[TIL] : Sequelize 검색 기능 구현 시, 검색 범위 확장(조회할 컬럼 추가)

Veams 2023. 2. 8.

개발 환경

 

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 (뚱카롱) 상품은 조회되지 않는다.

상품 설명에 '마카롱'이 기재되지 않았기 때문에, '마카롱'을 검색하면 당연히 나오질 않는다.

- '카롱'을 검색하면 함께 나온다

 

유저가 상품의 검색을 하기 위해 어떤 키워드를 사용할지 모르는데, 결과를 충분히 조회할 수 하기 위해서 상품 등록시 키워드도 기입하는 컬럼도 추가하면 어떨까 싶다.

 

검색 기능은 처음이라서, 어떤 알고리즘을 사용하면 좋을지 앞으로 탐색하는 것이 과제가 될 것이다.

댓글