如何在电子商务产品目录中使用混合搜索

了解如何使用混合搜索建立电子商务产品目录,使用分面、促销、个性化和行为分析。

从向量搜索到强大的 REST API,Elasticsearch 为开发人员提供了最全面的搜索工具包。探索 GitHub 上的示例笔记本,尝试新事物。您也可以立即开始免费试用在本地运行 Elasticsearch

在本文中,我们将演示如何实现混合搜索,将全文搜索和矢量搜索的结果结合起来。混合搜索将这两种方法统一起来,充分利用了两种搜索策略的优点,从而提高了搜索结果的广度。

除了集成混合搜索,我们还将演示如何添加功能,使您的搜索解决方案更加强大。其中包括切面和个性化产品促销。此外,我们还将向您展示如何使用 Elastic 的行为分析工具捕捉用户互动并生成有价值的见解。

在本实现中,您将看到如何构建允许用户查看搜索结果并与之交互的界面,以及负责返回信息的应用程序接口。要访问包含源代码的资源库,请点击下面的链接:

我们将本指南分为几个步骤,从创建索引到实施分面和结果个性化等高级功能。最后,您将拥有一个强大的搜索解决方案,可以在电子商务场景中使用。

在开始实施之前,我们需要设置环境。您可以选择使用 Elastic Cloud 上的服务或容器化解决方案来管理 Elasticsearch。如果选择容器化,可在此版本库中找到通过 Docker Compose 进行的配置:docker-compose.yml

创建索引和录入产品目录

索引将根据化妆品目录创建,其中包括名称、描述、照片、类别和标签等字段。用于全文搜索的字段,如"名称" 和"描述," 将被映射为text ,而用于聚合的字段,如"类别" 和"品牌," 将被映射为keyword ,以便进行分面搜索。

"description" 字段将用于矢量搜索,因为它提供了有关产品的更多背景信息。这个字段将被定义为dense_vector, ,存储描述的矢量表示。

索引映射如下

创建索引的脚本可在此处找到。

嵌入式生成

为了将产品描述矢量化,我们使用了 all-MiniLM-L6-v2 模型。在这种情况下,应用程序负责在编制索引前生成嵌入。另一种方法是将模型导入 Elasticsearch 集群,但在本地环境中,我们选择直接在应用程序中执行矢量化。

我们使用Kaggle上的化妆品数据集来填充索引,为了提高数据摄取的效率,我们使用了批处理方法。在同一摄取阶段,我们将生成"description" 字段的嵌入,并将其索引到新字段"description_embeddings" 中。

整个数据摄取过程可通过存储库中的Jupyter Notebook直接跟踪和执行。该笔记本提供了关于如何读取、处理数据并将其编入 Elasticsearch 索引的分步指南,便于复制和实验。

您可以通过以下链接访问该笔记本:摄入笔记本。

混合搜索实施

现在,让我们来实现混合搜索。对于基于关键字的搜索,我们使用multi_match查询,目标字段为"name、" " category、" 和"description。"这样就能确保检索到这些字段中包含搜索词的文档。

对于向量搜索,我们使用KNN 查询。在执行查询之前,需要对搜索词进行矢量化,这需要使用对输入词进行矢量化的方法来完成。请注意,摄取时使用的同一模型也用于搜索词。

这两种搜索的组合是通过互易等级融合(RRF) 算法完成的,该算法可合并两种查询的结果,并通过减少噪音来提高搜索精度。RRF 允许基于关键字的搜索和矢量搜索共同发挥作用,从而增强对用户查询的理解。

现在,让我们比较一下传统关键词搜索和混合搜索的结果。当使用关键字搜索"干性皮肤粉底" 时,我们会得到以下结果:

  1. Revlon ColorStay Makeup for Normal / Dry SkinDescription:露华浓持久彩妆(Revlon ColorStay Makeup)质地轻盈,遮瑕持久,不会结块、褪色或脱妆。这款无油、保湿平衡配方采用了 "定时释放技术",特别适合中性或干性肌肤使用,能够持续为肌肤补充水分:妆感舒适,可持续使用长达 24 小时;中等至完全遮盖;有多种美丽色调可供选择。
  2. 美宝莲梦幻柔滑慕斯粉底液描述:你会爱上它的原因独特的乳霜状粉底提供 100% 婴儿般柔滑的完美肤质。不含油、不含香料,通过皮肤科医生测试,通过过敏测试,不致粉刺,不会堵塞毛孔。适合敏感性皮肤

分析:在搜索"干性皮肤粉底时," 搜索结果是通过搜索关键词与产品标题和描述之间的精确匹配获得的。然而,这种匹配并不总是最佳选择。例如,Revlon ColorStay Makeup for Normal / Dry Skin就是一个不错的选择,因为它是专为干性皮肤配制的。尽管它不含油分,但其配方设计却能提供持续的保湿效果。相比之下,我们还收到了美宝莲梦幻柔滑慕斯粉底液,虽然这款粉底液不含油分,也能补充水分,但一般更推荐油性或混合性皮肤使用,因为无油产品往往侧重于控油,而不是提供干性皮肤所需的额外水分。这凸显了基于关键词搜索的局限性,因为这种搜索可能会返回无法完全满足干性皮肤患者特殊需求的产品。

现在,使用混合方法进行相同的搜索:

  1. CoverGirl Outlast Stay Luminous Foundation Creamy Natural (820):产品简介:CoverGirl Outlast Stay Luminous 粉底液是打造露光妆效和微妙光泽的完美之选。它不含油分,配方不油腻,能为肌肤带来全天候的自然亮泽!这款全天候粉底液可为肌肤补充水分,同时提供无瑕遮瑕。分析: 这款产品非常适合干性皮肤的用户,因为它强调补水。"Hydrates skin" 和"dewy finish" 这两个词符合用户寻找干性皮肤粉底的意图。矢量搜索很可能理解了补水的概念,并将其与解决皮肤干燥问题的粉底需求联系起来。
  2. Revlon ColorStay Makeup for Normal / Dry Skin:说明:Revlon ColorStay Makeup 采用轻盈配方,具有持久遮瑕效果,不会结块、褪色或脱落。这款不含油分的保湿平衡配方采用了 "定时释放技术",特别适合中性或干性肌肤使用,能持续为肌肤补充水分。分析: 这款产品直接针对干性皮肤用户的需求,明确指出其配方适用于中性或干性皮肤。"水分平衡配方" 和持续的保湿效果非常适合寻找适合干性皮肤的粉底的人。矢量搜索成功检索到这一结果,不仅是因为关键词匹配,还因为重点关注补水,并特别提到干性皮肤是目标人群。
  3. 精华粉底液说明: 精华粉底液质地轻盈,遮瑕度适中,共有 21 种色调可供选择。这些粉底液的遮瑕度适中,看起来很自然,精华液质地非常轻盈。它们的粘度很低,可使用随附的泵或单独购买的玻璃滴管进行分配。分析:在这款产品中,说明强调的是一款质地轻盈、妆感自然的精华粉底液,这与干性皮肤人群的需求不谋而合,因为干性皮肤人群通常需要的是温和、保湿、妆感不结块的产品。尽管"干性皮肤" 这个词没有被明确提及,但矢量搜索可能从更广泛的背景中捕捉到了轻盈、自然的遮盖力和类似精华液的质地,这与保湿度和涂抹舒适度有关,使其与干性皮肤相关。

面的实施

面孔对于有效提炼和过滤搜索结果至关重要,可为用户提供更有针对性的导航,尤其是在电子商务等产品种类繁多的情况下。它们允许用户根据类别、品牌或价格等属性调整搜索结果,使搜索更加准确。为了实现这一功能,我们在 category和 字段上使用了 术语聚合brand ,这两个 字段keyword 在索引创建阶段被定义为 。

实施的完整代码可在此处找到。

下面是搜索"适用于干性皮肤的粉底" 的面结果:

自定义结果:固定查询

在某些情况下,在搜索结果中推广某些产品可能是有益的。为此,我们使用了 "固定查询",它允许特定产品出现在搜索结果的顶部。下面,我们将在不推销任何产品的情况下搜索"Foundation" :

在我们的例子中,我们可以推广带有"无麸质标签的产品。"通过使用产品 ID,我们可以确保产品在搜索结果中的优先级。具体而言,我们将推广以下产品:精华粉底液(编号:1043)、遮瑕粉底液(编号:1042)和Realist 隐形定妆粉(编号:1039)。

我们使用特定的产品 ID 来确保它们在查询结果中的优先级。查询结构包括一个产品 ID 列表,该列表应将"钉在" 的顶部(在本例中,ID 为 1043、1042 和 1039),而其余结果则按照搜索的有机流程,使用"name" 、"category" 和"description" 等字段中的文本查询条件组合。这样,就有可能以可控的方式推广项目,确保其可见性,同时保持搜索的其他部分基于通常的相关性。

下面是查询执行的结果和促销产品:

完整的查询代码可在此处找到。

利用行为分析技术分析搜索行为

到目前为止,我们已经增加了一些功能,以提高搜索结果的相关性和产品的可发现性。现在,我们将通过加入一项功能来最终确定搜索解决方案,该功能将帮助我们分析用户的搜索行为,识别有结果或无结果的查询以及搜索结果的点击等模式。为此,我们将使用 Elastic 提供的行为分析功能。有了它,只需几个步骤,我们就能监控和分析用户的搜索行为,获得宝贵的见解,从而优化搜索体验。

创建行为分析集合

我们的第一项操作是创建一个集合,负责接收所有行为分析事件。要创建集合,请访问Search> Behavioral Analytics 中的 Kibana 界面。在下面的示例中,我们创建了名为tracking-search 的集合。

将行为分析整合到界面中

我们的前端应用程序是用 JavaScript 开发的,为了集成行为分析,我们将按照 Elastic 官方文档中描述的步骤安装行为分析 JavaScript 跟踪器

实施 JavaScript 跟踪器

现在,我们将把跟踪器客户端导入应用程序,并使用trackPageViewtrackSearchtrackSearchClick 方法来捕捉用户交互。

免责声明:虽然我们正在使用一种工具来收集用户交互数据,但这对于确保遵守GDPR 至关重要。这意味着要明确告知用户正在收集哪些数据、将如何使用这些数据,并提供选择退出跟踪的选项。此外,我们必须采取强有力的安全措施来保护收集到的信息,并尊重用户的权利,如数据访问和删除,确保所有步骤都符合 GDPR 原则。

步骤 1:创建跟踪器实例

首先,我们将创建用于监控交互的跟踪器实例。在此配置中,我们定义了目标端点、集合名称和 API 密钥:

步骤 2:获取页面浏览量

要跟踪页面浏览量,我们可以配置trackPageView 事件:

有关trackPageView 事件的详细信息,请参阅本文档

步骤 3:捕捉搜索查询

为了监控用户的搜索行为,我们将使用trackSearch 方法:

在这里,我们收集搜索词和搜索结果。

步骤 4:跟踪搜索结果的点击率

最后,为了捕捉搜索结果的点击,我们将使用trackSearchClick 方法:

我们收集被点击文档的 ID 信息以及搜索词和搜索结果。

在 Kibana 中分析数据

既然已经捕捉到了用户交互事件,我们就可以获得有关搜索操作的宝贵数据。Kibana 使用行为分析工具来可视化和分析这些行为数据。要查看结果,只需导航到搜索> 行为分析> 我的收藏,就会显示捕获事件的概览。

在此概览中,我们可以大致了解集成到界面中的每个操作所捕获的事件。从这些信息中,我们可以获得有关用户搜索行为的宝贵见解。不过,如果您想创建个性化的仪表盘,其中包含与您的特定场景更相关的指标,Kibana 提供了用于构建仪表盘的强大工具,允许您创建各种指标可视化。

下面,我创建了一些可视化和图表来监测,例如,一段时间内搜索次数最多的词语、没有结果的查询、突出显示搜索次数最多的词语的词云,以及最后的地理可视化,以确定搜索访问来自哪里。

结论

在本文中,我们实施了一种混合搜索解决方案,将关键词和矢量搜索相结合,为用户提供更准确、更相关的搜索结果。我们还探索了如何使用其他功能,如面和钉住查询的个性化结果,以创建更完整、更高效的搜索体验。

此外,我们还集成了 Elastic 的行为分析功能,以捕捉和分析用户与搜索引擎交互过程中的行为。通过使用trackPageViewtrackSearchtrackSearchClick 等方法,我们能够监控搜索查询、搜索结果点击量和页面浏览量,从而对搜索行为产生有价值的见解。

参考资料

数据集

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

行为分析应用程序接口

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 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用