본문 바로가기

관심사/IT와 서비스

이커머스에서 검색엔진이 필요한 이유

이커머스에서 검색엔진이란, 사용자들이 쉽게 상품을 검색할 수 있게 해주는 기술을 의미한다.

상품 검색을 아래와 같이 DB에 상품명을 단순 조회하는 방법으로 생각할 수 있지만, 이 방식은 몇가지 한계가 있다.

 

SELECT * FROM products WHERE product_title LIKE '%{search_query}%'

 

 

1. 상품명이 정확하게 일치해야 상품을 조회할 수 있다. 

위와 같은 쿼리로 "리버시블 무스탕”을 검색하면, "램스울 리버시블 숏 무스탕”이라는 상품은 검색할 수 없다. 

완전 일치되는 상품만 검색할 수 있기 때문이다. 

 

2. 검색 결과를 가중치에 따라 정렬할 수 없다. 

정확도순 (계절/키워드 가중치 등), 추천순 등을 반영하기 어렵다. 

 

3.하나의 속성에 대한 검색만 가능하다. 

위의 쿼리는 상품명 속성 검색만 지원한다. 

때문에 브랜드명, 카테고리, 소재 등에 대한 검색이 불가능하다. 

 

4.유사어 검색이 불가능하다. 

"리버서블 무스탕”으로 조회하면, “리버시블 무스탕” 상품도 조회할 수 있어야한다.

그런데 일반 데이터베이스 조회는 유사어 검색을 지원하지 않기 때문에 이러한 추적이 불가능하다. 

 

5.키워드 필터링이 불가능하다. 

"귀여운 니트와 청바지”라는 키워드 검색 시, “와” 같은 조사는 검색에서 의미없는 키워드이다. 

때문에 정확도 검색의 조건에서 제외되어야한다. 그런데 일반 데이터베이스에서 검색 시, 이러한 필터링이 불가능하다. 

 

이커머스의 상품검색에서는 이러한 이슈가 중요하지는 않다. 

 

6.어간 추출이 불가능하다. 

“따뜻함”, “따뜻하게”, “따뜻한”, “따뜻하다” 등의 형용사는 결국 “따뜻”이라는 원형을 의미한다. 

 

"한 겨울을 따뜻하게 해주는 패딩”이라는 상품명이 있는 경우, “따뜻한 패딩”이라는 검색어로도 찾을 수 있어야한다. 

 

일반 데이터베이스 질의는 이러한 어간추출 및 관련 상품 조회를 지원하지 않는다. 

 

 

7. 단어 빈도에 따라 검색 우선순위를 정하는게 불가능하다. 

검색 키워드에서는 키워드 검색에서 많이 언급되었지만, 다른 문서에서는 많이 언급되지 않는 단어가 높은 가중치를 가져야한다. 

 

예를 들어 “리버시블 롱 바지” 키워드에서는 “리버시블”이라는 키워드가 “바지”라는 키워드보다 높은 가중치를 가져야한다. 왜냐하면 “바지”라는 키워드는 이미 많은 상품명에서 입력하고 있기 때문에, 사용자의 의도를 가장 반영하고 있다고 볼 수 없기 때문이다. 

 

그리고 이 높은 가중치를 기반으로 상품검색을 해야한다. 

 

 

8. 일반적인 SQL 데이터베이스는 확장성이 떨어진다. 

 

 

 

검색엔진

때문에 “검색엔진”을 사용하면 속도와 검색 품질 측면에서 위와 같은 문제를 해결할 수 있다. 

 

인덱싱

검색엔진을 사용하면 여러 검색 조건을 걸어도, 빠르게 데이터를 조회할 수 있다.

RDB에서는 여러 검색 조건이 있는 경우, 각 컬럼에 별도의 인덱스를 추가하고 관리해줘야한다.

인덱스를 추가해주지 않는 경우, 느리고 비효율적이다. 

 

반면, 검색엔진은 토큰화된 키워드를 역인덱싱 해주어서, 여러 조건으로도 빠르게 도큐먼트를 찾을 수 있다. 

그리고 어근화 처리, 불용어 제외 등을 처리해주기 때문에, 목적에 맞는 의도한 문서를 찾기 쉽다. 

 

가중치 기반 정렬

검색엔진을 활용하면 인덱싱된 데이터의 가중치를 기반으로 정렬하기 쉽다.

예를 들어, 상품검색에서 카테고리/브랜드 정확도 순으로 데이터를 정렬할 수 있다. 

그리고 문서에서 키워드가 지닌 중요도를 기반으로 정렬하는 것 또한 가능하다. (TF/IDF)

 

참고 링크

https://app.getpocket.com/read/2843133719