이커머스 제품 카탈로그에 하이브리드 검색을 사용하는 방법

패싯, 프로모션, 개인화 및 행동 분석을 사용하여 하이브리드 검색을 사용하여 이커머스 제품 카탈로그를 구축하는 방법을 알아보세요.

벡터 검색부터 강력한 REST API까지, Elasticsearch는 개발자에게 가장 폭넓은 검색 도구 키트를 제공합니다. GitHub의 샘플 노트북을 살펴보고 새로운 기능을 시험해 보세요. 무료 체험판을 시작하거나 지금 바로 Elasticsearch를 로컬에서 실행할 수도 있습니다.

이 문서에서는 전체 텍스트 검색 결과와 벡터 검색 결과를 결합하는 하이브리드 검색을 구현하는 방법을 설명합니다. 하이브리드 검색은 이 두 가지 접근 방식을 통합함으로써 두 가지 검색 전략의 장점을 모두 활용하여 검색 결과의 폭을 개선합니다.

하이브리드 검색을 통합하는 것 외에도 검색 솔루션을 더욱 강력하게 만드는 기능을 추가하는 방법을 보여드리겠습니다. 여기에는 패싯 및 개인화된 제품 프로모션이 포함됩니다. 또한 Elastic의 행동 분석 도구를 사용하여 사용자 상호 작용을 캡처하고 귀중한 인사이트를 생성하는 방법도 보여드립니다.

이 구현에서는 사용자가 검색 결과를 보고 상호 작용할 수 있는 인터페이스와 정보 반환을 담당하는 API를 모두 구축하는 방법을 살펴봅니다. 소스 코드가 있는 리포지토리에 액세스하려면 아래 링크를 참조하세요:

이 가이드는 인덱스 생성부터 패싯 및 결과 개인화와 같은 고급 기능 구현에 이르기까지 여러 단계로 나누어 설명합니다. 마지막에는 이커머스 시나리오에서 사용할 수 있는 강력한 검색 솔루션이 준비됩니다.

구현을 시작하기 전에 환경을 설정해야 합니다. Elastic Cloud의 서비스 또는 컨테이너화된 솔루션을 사용하여 Elasticsearch를 관리하도록 선택할 수 있습니다. 컨테이너화를 선택하는 경우 Docker Compose를 통한 구성은 이 리포지토리에서 찾을 수 있습니다: docker-compose.yml.

인덱스 생성 및 제품 카탈로그 수집

색인은 이름, 설명, 사진, 카테고리, 태그 등의 필드가 포함된 화장품 카탈로그를 기반으로 만들어집니다. "name", "description," 등 전체 텍스트 검색에 사용되는 필드는 text 로 매핑되고, "category", "brand," 등 집계에 사용되는 필드는 keyword 로 매핑되어 패싯을 사용할 수 있습니다.

"설명" 필드는 제품에 대한 자세한 컨텍스트를 제공하므로 벡터 검색에 사용됩니다. 이 필드는 설명의 벡터 표현을 저장하는 dense_vector, 으로 정의됩니다.

인덱스 매핑은 다음과 같습니다:

색인 생성을 위한 스크립트는 여기에서 확인할 수 있습니다.

임베딩 생성

제품 설명을 벡터화하기 위해 모든 미니LM-L6-v2 모델을 사용합니다. 이 경우 애플리케이션은 인덱싱하기 전에 임베딩을 생성할 책임이 있습니다. 또 다른 옵션은 모델을 Elasticsearch 클러스터로 가져오는 것이지만, 이 로컬 환경에서는 애플리케이션 내에서 직접 벡터화를 수행하는 방법을 선택했습니다.

Kaggle에서 제공되는 화장품 데이터 세트를 사용하여 인덱스를 채우고, 데이터 수집의 효율성을 높이기 위해 일괄 처리를 사용했습니다. 동일한 수집 단계에서 "description" 필드에 대한 임베딩을 생성하고 새 필드 "description_embeddings" 로 인덱싱합니다.

전체 데이터 수집 프로세스는 리포지토리에서 제공되는 Jupyter Notebook을 통해 직접 추적하고 실행할 수 있습니다. 이 노트북은 데이터를 읽고, 처리하고, 색인하는 방법에 대한 단계별 가이드를 제공하여 쉽게 복제하고 실험할 수 있도록 해줍니다.

다음 링크에서 노트북에 액세스할 수 있습니다: 수집 노트북.

하이브리드 검색 구현

이제 하이브리드 검색을 구현해 보겠습니다. 키워드 기반 검색의 경우 다중 일치 쿼리를 사용하여 "name," " category," 및 "description 필드를 타겟팅합니다." 이렇게 하면 이러한 필드에 검색어가 포함된 문서가 검색됩니다.

벡터 검색의 경우 KNN 쿼리를 사용합니다. 쿼리를 실행하기 전에 검색어를 벡터화해야 하며, 이는 입력어를 벡터화하는 방법을 사용하여 수행됩니다. 수집 시 사용된 것과 동일한 모델이 검색어에도 사용된다는 점에 유의하세요.

두 검색의 조합은 두 쿼리의 결과를 병합하고 노이즈를 줄여 검색 정확도를 높이는 상호 순위 융합(RRF) 알고리즘을 사용하여 이루어집니다. RRF를 사용하면 키워드 기반 검색과 벡터 검색이 모두 함께 작동하여 사용자의 쿼리에 대한 이해도를 높일 수 있습니다.

이제 기존 키워드 검색과 하이브리드 검색의 결과를 비교해 보겠습니다. 키워드 검색을 사용하여 "건성 피부용 파운데이션" 을 검색하면 다음과 같은 결과가 표시됩니다:

  1. 중성/건성 피부를 위한 레브론 컬러스테이 메이크업설명: 레브론 컬러스테이 메이크업은 케이크, 퇴색 또는 문지르지 않는 가벼운 포뮬러로 오래 지속되는 커버력을 제공합니다. 타임 릴리스 \n기술이 적용된 이 오일 프리, 수분 밸런스 포뮬러는 특히 \n중성 또는 건성 피부에 지속적으로 수분을 공급하도록 제조되었습니다.\n특징: 최대 24시간 동안 메이크업이 편안하게 지속됨\n중간 커버부터 풀 커버까지 가능\n다양하고 아름다운 색조로 제공됨
  2. 메이블린 드림 스무스 무스 파운데이션설명: 좋아하는 이유독특한 크림 휘핑 파운데이션이 100% 아기처럼 부드러운 완벽함을 선사합니다.\n\n피부 14시간 동안 촉촉함이 유지되며 거칠거나 건조하지 않습니다\n경량 포뮬러가 완벽한 보습 커버력을 제공합니다\n모공에 매끄럽게 밀착되어 하루 종일 산뜻합니다\n무오일, 무향, 피부과 테스트, 알레르기 테스트, 논코메도제닉 \u2013원\u2019t 모공 막힘\n안전합니다. 민감한 피부를 위한 제품입니다.

분석: 건성 피부용 파운데이션( ")을 검색할 때" 검색어 키워드와 제품 제목 및 설명이 정확히 일치하는 결과를 얻었습니다. 하지만 이 매치가 항상 최선의 선택을 반영하는 것은 아닙니다. 예를 들어, 건성 피부를 위해 특별히 고안된 레브론 컬러스테이 메이크업 포 노멀/건성 피부용은 좋은 선택입니다. 오일 프리 제품이지만 지속적으로 수분을 공급할 수 있도록 포뮬러가 설계되었습니다. 반면 메이블린 드림 스무스 무스 파운데이션은 오일 프리이면서 수분 공급을 언급하고 있지만, 일반적으로 오일 프리 제품은 건성 피부에 필요한 추가 수분을 공급하기보다는 유분 조절에 중점을 두는 경향이 있기 때문에 지성 또는 복합성 피부에 더 권장되는 제품입니다. 이는 건성 피부를 가진 사람들의 특정 요구 사항을 완전히 충족하지 못하는 제품을 표시할 수 있는 키워드 기반 검색의 한계를 강조합니다.

이제 하이브리드 접근 방식을 사용하여 동일한 검색을 수행합니다:

  1. 커버걸 아웃라스트 스테이 루미너스 파운데이션 크리미 내추럴 (820):설명: 커버걸 아웃라스트 스테이 루미너스 파운데이션은 촉촉한 마무리와 은은한 광채를 연출하기에 완벽한 제품입니다. 기름기가 없는 포뮬러로 하루 종일 지속되는 자연스러운 광채를 피부에 선사하는 오일 프리 제품입니다! 이 올데이 파운데이션은 피부에 수분을 공급하고 결점을 완벽하게 커버합니다.

    분석: 이 제품은 건성 피부 사용자에게 중요한 수분 공급을 강조하는 제품이기 때문에 적절하게 어울립니다. "촉촉한 피부" 및 "보송한 마무리" 라는 용어는 건성 피부를 위한 파운데이션을 찾는 사용자의 의도와 일치합니다. 벡터 검색은 수분 공급의 개념을 이해하고 이를 건성 피부를 위한 파운데이션의 필요성과 연결시켰을 가능성이 높습니다.
  2. 중성/건성 피부용 레브론 컬러스테이 메이크업:설명: 레브론 컬러스테이 메이크업은 케이크, 퇴색 또는 문지르지 않는 가벼운 포뮬러로 오래 지속되는 커버력을 제공합니다. 타임 릴리스 기술이 적용된 이 오일 프리 수분 밸런스 포뮬러는 특히 중성 또는 건성 피부를 위해 만들어져 지속적으로 수분을 공급합니다.

    분석: 이 제품은 건성 피부 사용자의 요구를 직접적으로 해결하며, 중성 또는 건성 피부용으로 만들어졌다고 명시적으로 언급하고 있습니다. "수분 밸런스 포뮬러(" )와 지속적인 수분 공급은 건성 피부에 적합한 파운데이션을 찾는 분들에게 적합합니다. 벡터 검색은 키워드 매칭뿐만 아니라 수분 공급에 초점을 맞추고 건성 피부를 타겟 고객층으로 구체적으로 언급했기 때문에 이 결과를 성공적으로 검색할 수 있었습니다.
  3. 세럼 파운데이션설명: 세럼 파운데이션은 21가지의 다양한 쉐이드로 제공되는 가벼운 미디엄 커버리지 포뮬러입니다. 이 파운데이션은 매우 가벼운 세럼 느낌으로 자연스러워 보이는 적당한 커버력을 제공합니다. 점도가 매우 낮으며 제공된 펌프를 사용하거나 원하는 경우 별도로 구매할 수 있는 유리 드롭퍼(옵션)를 사용하여 추출할 수 있습니다.

    분석: 이 경우 설명은 자연스러운 느낌의 가벼운 세럼 파운데이션을 강조하고 있는데, 이는 건성 피부를 가진 사람들이 종종 부드럽고 촉촉하며 케이크처럼 들뜨지 않는 마무리감을 제공하는 제품을 찾기 때문에 이들의 니즈에 부합하는 것입니다. 벡터 검색은 ' "건성 피부" '라는 용어가 명시적으로 언급되지 않았음에도 불구하고 가볍고 자연스러운 커버력과 세럼과 같은 텍스처, 수분 유지 및 편안한 사용감과 관련된 광범위한 맥락에서 건성 피부와 관련이 있는 것으로 판단한 것으로 보입니다.

패싯 구현

패싯은 검색 결과를 효율적으로 구체화하고 필터링하는 데 필수적이며, 특히 전자상거래와 같이 다양한 제품이 있는 시나리오에서 사용자에게 보다 집중된 탐색 기능을 제공합니다. 카테고리, 브랜드, 가격 등의 속성에 따라 검색 결과를 조정할 수 있어 검색 정확도를 높일 수 있습니다. 이 기능을 구현하기 위해 인덱스 생성 단계에서 keyword 로 정의된 categorybrand 필드에 용어 집계를 사용합니다.

구현을 위한 전체 코드는 여기에서 확인할 수 있습니다.

건성 피부용 파운데이션 "검색의 패싯 결과" 를 아래에서 확인하세요:

결과 사용자 지정: 고정된 쿼리

경우에 따라 검색 결과에서 특정 제품을 홍보하는 것이 유리할 수 있습니다. 이를 위해 특정 제품을 결과 상단에 표시할 수 있는 고정 쿼리를 사용합니다. 아래에서는 제품을 홍보하지 않고 "재단" 이라는 용어를 검색합니다:

이 예제에서는 "글루텐 프리 태그가 있는 제품을 홍보할 수 있습니다." 제품 ID를 사용하면 검색 결과에서 우선순위를 지정할 수 있습니다. 구체적으로 다음 제품을 홍보할 예정입니다: 세럼 파운데이션 (ID: 1043), 커버 파운데이션 (ID: 1042), 리얼리스트 인비저블 세팅 파우더 (ID: 1039).

특정 제품 ID를 사용하여 쿼리 결과에서 해당 제품이 우선순위를 갖도록 합니다. "쿼리 구조에는" 에 고정되어야 하는 제품 ID 목록(이 경우 ID 1043, 1042, 1039)이 상단에 포함되며, 나머지 결과는 "name", "category", "description" 필드에 텍스트 쿼리와 같은 조건을 조합하여 검색의 자연스러운 흐름을 따르는 구조로 되어 있습니다. 이렇게 하면 항목을 제어된 방식으로 홍보하여 가시성을 확보하는 동시에 나머지 검색은 일반적인 관련성을 기반으로 유지할 수 있습니다.

아래에서 프로모션된 제품에 대한 쿼리 실행 결과를 확인할 수 있습니다:

전체 쿼리 코드는 여기에서 확인할 수 있습니다.

행동 분석으로 검색 행동 분석하기

지금까지 검색 결과의 연관성을 개선하고 제품을 쉽게 찾을 수 있는 기능을 추가했습니다. 이제 사용자 검색 행동을 분석하여 결과가 있는 쿼리와 없는 쿼리, 검색 결과 클릭 등의 패턴을 식별하는 데 도움이 되는 기능을 포함시켜 검색 솔루션을 완성할 것입니다. 이를 위해 Elastic에서 제공하는 행동 분석 기능을 사용할 것입니다. 이를 통해 몇 단계만 거치면 사용자 검색 행동을 모니터링하고 분석하여 검색 환경을 최적화할 수 있는 귀중한 인사이트를 얻을 수 있습니다.

행동 분석 컬렉션 만들기

첫 번째 작업은 모든 행동 분석 이벤트를 수신할 컬렉션을 만드는 것입니다. 컬렉션을 생성하려면 검색 > 행동 분석에서 Kibana 인터페이스에 액세스하세요. 아래 예제에서는 tracking-search 라는 이름의 컬렉션을 만들었습니다.

행동 분석을 인터페이스에 통합하기

우리의 프론트엔드 애플리케이션은 JavaScript로 개발되었으며, 행동 분석을 통합하기 위해 공식 Elastic 설명서에 설명된 단계에 따라 행동 분석 JavaScript 추적기를 설치합니다.

자바스크립트 트래커 구현하기

이제 트래커 클라이언트를 애플리케이션으로 가져와 trackPageView, trackSearch, trackSearchClick 메서드를 사용하여 사용자 상호작용을 캡처하겠습니다.

면책 조항: 사용자 상호작용 데이터를 수집하기 위해 도구를 사용하고 있지만, GDPR을 준수하는 것은 필수적입니다. 즉, 사용자에게 어떤 데이터가 수집되고 어떻게 사용되는지 명확하게 알리고 추적 거부 옵션을 제공해야 합니다. 또한 수집된 정보를 보호하고 데이터 액세스 및 삭제와 같은 사용자 권리를 존중하기 위해 강력한 보안 조치를 구현하여 모든 단계가 GDPR 원칙을 준수하도록 해야 합니다.

1단계: 트래커 인스턴스 만들기

먼저 상호작용을 모니터링할 트래커 인스턴스를 생성합니다. 이 구성에서는 대상 엔드포인트, 컬렉션 이름 및 API 키를 정의합니다:

2단계: 페이지 조회수 캡처

페이지 조회수를 추적하려면 trackPageView 이벤트를 구성하면 됩니다:

trackPageView 이벤트에 대한 자세한 내용은 이 문서를 참조하세요.

3단계: 검색 쿼리 캡처

사용자의 검색 작업을 모니터링하기 위해 trackSearch 방법을 사용합니다:

여기에서 검색어와 검색 결과를 수집하고 있습니다.

4단계: 검색 결과 클릭 추적하기

마지막으로 검색 결과의 클릭 수를 캡처하기 위해 trackSearchClick 방법을 사용합니다:

당사는 클릭한 문서의 ID와 검색어 및 검색 결과에 대한 정보를 수집합니다.

Kibana에서 데이터 분석하기

이제 사용자 상호작용 이벤트가 캡처되고 있으므로 검색 동작에 대한 귀중한 데이터를 얻을 수 있습니다. Kibana는 행동 분석 도구를 사용하여 이 행동 데이터를 시각화하고 분석합니다. 결과를 보려면 검색 > 행동 분석 > 내 컬렉션으로 이동하면 캡처된 이벤트의 개요가 표시됩니다.

이 개요에서는 인터페이스에 통합된 각 작업에 대해 캡처된 이벤트를 전반적으로 살펴볼 수 있습니다. 이 정보를 통해 사용자 검색 행동에 대한 귀중한 인사이트를 얻을 수 있습니다. 그러나 특정 시나리오와 더 관련성이 높은 메트릭으로 개인화된 대시보드를 만들고 싶다면, Kibana는 대시보드 구축을 위한 강력한 도구를 제공하여 메트릭의 다양한 시각화를 만들 수 있게 해줍니다.

아래에서는 시간 경과에 따른 가장 많이 검색된 용어, 결과가 없는 쿼리, 가장 많이 검색된 용어를 강조하는 워드 클라우드, 마지막으로 검색 액세스가 어디에서 발생하는지 파악하기 위한 지리적 시각화 등 몇 가지 시각화 및 차트를 만들어 모니터링했습니다.

결론

이 글에서는 키워드 검색과 벡터 검색을 결합한 하이브리드 검색 솔루션을 구현하여 사용자에게 보다 정확하고 관련성 높은 결과를 제공했습니다. 또한 고정 쿼리를 통해 패싯 및 결과 맞춤 설정과 같은 추가 기능을 사용하여 보다 완벽하고 효율적인 검색 환경을 만드는 방법도 살펴봤습니다.

또한 검색 엔진과 상호 작용하는 동안 사용자 행동을 포착하고 분석하기 위해 Elastic의 행동 분석을 통합했습니다. trackPageView, trackSearch, trackSearchClick 와 같은 방법을 사용하여 검색 쿼리, 검색 결과 클릭, 페이지 조회수를 모니터링하여 검색 행동에 대한 귀중한 인사이트를 얻을 수 있었습니다.

참고 자료

데이터 세트

https://www.kaggle.com/datasets/shivd24coder/cosmetic-brand-products-dataset

트랜스포머

https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

상호 등급 융합

https://www.elastic.co/guide/en/elasticsearch/reference/current/rrf.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/retriever.html#rrf-retriever

Knn 쿼리

https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html

고정 쿼리

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-pinned-query.html

행동 분석 API

https://www.elastic.co/guide/en/elasticsearch/reference/current/behavioral-analytics-apis.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/behavioral-analytics-overview.html

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요