Solr & Elasticsearch——建模信号以构建真正的语义搜索

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 276 小节,累计 43w+ 字,讲解图:1917 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1500+ 小伙伴加入,欢迎点击围观

以下是 相关搜索 的想法摘要摘录。 dzone 读者可以 使用优惠代码 turnbullmu 享受 38% 的折扣! 这最初是 在这里 发表的。

也许你可能犯的最大的相关性错误是直接从源头获取内容,然后将其直接放入 elasticsearch 或 solr 中。尝试搜索直接反映默认设置索引的数据源属性的字段不会给您带来很好的结果。

为什么是这样?来自现场搜索的未经修改的相关性分数可能不符合有意义的业务或域排名标准。您需要了解诸如“是否在这部电影中搜索过演员明星?”,“附近有这家餐馆吗?”,“该产品是否受到好评?”之类的标准。然而,来自 API、数据库和文件系统的数据通常被细分为属性,无法使用默认搜索设置来回答这些问题。

您几乎总是必须操纵您的数据才能使用搜索引擎回答这些问题。幸运的是,有了开源搜索,一切尽在您的掌控之中! 可以制作相关性分数以在数字上反映所需的标准。 可以控制哪些术语最终出现在字段中以形成相关性分数的基础。 深入操作lucene来控制评分和搜索!当您理解这一点时,您就开始根据可量化的业务标准来表达相关性,而不是屈服于默认评分和字段结构。您认为您的字段是为搜索和评分而构建的,以衡量重要的相关性 信号 ——与有价值的标准有意义地对应的数字,例如“用户正在搜索此类餐厅的可能性”、“用户与餐厅的接近程度” ,“餐厅的评价如何”,或“关于搜索词的正文有多少”——或您的用户认为相关的任何内容。

我是什么意思为什么搜索引擎不能弄清楚如何根据此标准自动对结果进行排名?让我们以文本字段为例。回想一下 solr 或 elasticsearch 中的默认文本相关性分数是 tf*idf。这意味着对提及更多搜索词(tf 或词频)的字段的强烈偏见乘以这些词在语料库中的罕见程度(idf 或反向文档频率)。 tf*idf 已被证明是一种合理的、通用的文本搜索相关性度量。


用户有自己的期望,这与您的数据库或源系统如何组织数据无关!未能对他们关心的信号进行建模是大多数搜索解决方案的最大失败。


但是,您的用例的具体情况可能意味着默认 tf*idf 无法衡量您需要的标准。我们在上一篇文章中深入 研究标题搜索 时看到了这一点。事实证明,像“who”这样的奇怪术语在标题字段中非常罕见。这极大地扰乱了结果排名,导致像“苏格拉底是谁”这样的搜索返回像“柏拉图是谁”这样的搜索结果,其排名远高于像“苏格拉底”这样简单、切合主题的标题。诸如“who”之类的术语的稀有性 (idf) 无助于创建与“文章标题描述了用户搜索术语中的主题”相关联的信号。因此,我们不得不删除许多这些极其罕见的术语。这个和其他一些措施将标题搜索从相当愚蠢的搜索变成了更智能的体验,非常类似于在书店的书架上仔细阅读以找到一本关于“苏格拉底”的好书。

换句话说,我们提高了与标题字段相关性得分相关的信息质量。当“文章标题描述了用户搜索词中的主题”时,我们将相关性分数转化为更精确测量的信号。这是与用户的意图以及我们的业务希望如何构建排名规则更有意义相关的标准。

将相关性分数转化为更智能的、特定于领域的信号的过程,这些信号可以量化地衡量您和您的数据的重要标准,称为 信号建模 。在 信号建模 时,我们深入操纵字段以更精确地评​​分以衡量标准。这就是高质量排名解决方案与那些不那么努力的解决方案的区别所在。这是 相关搜索 的关键思想,也是 osc 如何处理相关问题的基础。

当您考虑可以在搜索引擎中操作字段的所有方式时,您就会看到基于 lucene 的解决方案如何真正启用信号建模以捕获重要信号。开源搜索解决方案的优势在于您可以在多大程度上操纵术语如何构成一个字段以及如何通过以下功能对它们进行评分:

  • 分析以控制索引中术语的组成。启用特定于域的同义词、停用词、双字母索引或您可以从内容中获取的任何标记!
  • 禁用/启用评分功能,例如字段规范(与字段长度相关)、术语频率、idf 等,以控制基于文本的相关性的各个方面
  • 当用户不关心区分任意细分的字段(如文章的“摘要”和“正文”)时,copyfields 将更细粒度的字段复制到更大的字段中以生成更普遍的相关性信号
  • 通过lucene插件修改评分或相似度,直接控制相关性评分
  • 利用价值领域,如用户评级、盈利能力、销售额
  • 使用地理信息

事实上,一旦您意识到字段不是存储和检索机制,而是启用评分的容器,您就可以开始使用它们和上述功能来构建真正强大和精确的相关信号。您无需按表面值从源系统中获取字段。相反,您可以操纵它们和它们的得分到第 n 级,以完善它们在搜索时提供的测量。不要陷入不掌握可用工具的陷阱,而是要了解存在可以操纵的字段——真正建模——以创建满足用户重要排名标准的相关性信号。随着精度的提高,这些信号变得有意义——并启用真正的“语义”搜索,以用户和企业都可以与有意义的信息相关联的方式表达排名。

这可能看起来很抽象。当我们反思字段的组成和评分方式时,可以在 我们的 整个 博客 找到信号建模的示例。这是一种渗透到我们的相关哲学中的技能——以至于我们正在写一本高度重视它的书。

如果您想超越自己的基本搜索解决方案,构建更强大的东西。请 联系我们 !我们很乐意帮助您解决搜索问题!

提醒! 拿起与这些想法相关的书!购买 相关搜索 ——输入代码 turnbullmu 可享受 38% 的折扣!