Solr:分数百分比

2023-11-26

首先,我已经看到了lucene 文档这告诉我们不要以百分比形式生成分数:

人们经常想要计算 Lucene 分数的“百分比” 确定什么是“100% 完美”匹配与“50%”匹配。这是 也称为“标准化分数”

不要这样做。

严重地。不要再试图以这种方式思考你的问题,事实并非如此 会有好的结局。

由于这些建议,我使用了另一种方法来解决我的问题。

However,lucene的论证有几点我不太明白为什么它们在某些情况下会出现问题。

对于以下情况这个帖子,我可以很容易地理解为什么它不好:如果用户进行搜索并看到以下结果:

  • 产品A:5星
  • 产品B:2星
  • 产品C:1星

如果 ProductA 在第一次搜索后被删除,那么用户下次再来时,如果看到以下结果,他会感到惊讶:

  • 产品B:5星
  • 产品C:3星

那么,这个问题这正是 Lucene 的文档所指出的.


现在,我们再举一个例子。

想象一下我们有一个电子商务网站正在使用“经典搜索”结合拼音搜索。此处的拼音搜索是为了避免由于拼写错误而导致最大数量的空结果。相对于经典搜索的分数,拼音结果的分数非常低。

在这种情况下,第一个想法是只返回具有至少为最高分数的 10%。即使使用经典搜索,低于此阈值的结果也不会被视为与我们相关。

如果我这样做的话我没有这个问题上面的帖子的原因是,如果删除文档,如果旧的第二个产品成为第一个产品,那么似乎合乎逻辑,并且用户不会感到非常惊讶(这与我将分数保留为浮点值的行为相同)。

此外,如果语音搜索的分数非常低,正如我们预期的那样,我们将保持相同的行为,仅返回相关分数。


So 我的问题是:按照 Lucene 建议的方式标准化分数总是不好吗?我的例子是一个例外还是即使对于我的例子来说这样做也是一个坏主意?


正如您所讨论的,Lucene 分数值仅与表达一场比赛中每场比赛的相对强度set比赛数。在一组特定搜索结果的上下文中,特定记录的分数已没有绝对的意义.

因此,唯一合适的分数标准化是标准化结果集中文档的相关性之间的关系,即使这样,您也需要非常小心地使用此信息。

考虑这个结果集,我们在其中检查每条记录的分数与紧接之前的结果:

ProductA         (Let's pretend the score is 10)
ProductB:  97%   (9.7)
ProductC:   8.5% (.82)
ProductD: 100%   (.82)
ProductE: 100%   (.82)
ProductF:  24%   (.2)

在这种情况下,前两个结果具有非常相似的分数,而接下来的三个结果具有相同的分数但显着落后。这些数字显然不会与在线购物者分享,但低relativeProductC 和 ProductF 的分数代表急剧下降,您可以could使用它们来通知其他显示选项。也许 ProductA 和 ProductB 会以比其他字体更大的字体显示。如果在急剧下跌之前只有一种产品出现,它可能会得到更特别的突出显示。

我警告不要完全压制相对地得分较低的结果在这种寻找中。正如您在示例中已经证明的那样,相对分数可能会产生误导,除非您的相关性经过非常精细的调整,否则最相关的文档可能并不总是最合适的。如果由于单个记录碰巧重复搜索词足够多次而赢得了出色的分数,从而导致所需的结果被丢弃,那么这对您没有任何好处,这是一个真正的威胁。

例如,"Hamilton Beach Three-In-One Convection Toaster Oven"将在搜索中匹配八分之一的单词toaster, while "ToastMaster Toast Toaster Toasting Machine TOASTER"根据您的索引方式,将匹配七个单词中的多达五个。 (这两个产品名称都是完全虚构的,但我希望第二个名称看起来不太有信誉。)

Also, 所有退回的文件是匹配的,无论他们的分数有多低。有时,排名较低的结果是用户真正想要的黑马发现。用户将not了解除非您告诉他们,否则存在超出他们所看到的匹配文档,因此您可能会将尾随结果隐藏在“第 2 页”或剪切后面,但您可能不想阻止它们。让用户了解结果集的大小还可以帮助他们决定如何微调搜索。使用分数的显着下降作为分页的阈值可能非常有趣,但可能是一个具有挑战性的实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Solr:分数百分比 的相关文章

  • MultiFieldQueryParser 正在从首字母缩略词中删除点

    我再次发布这个问题 因为我的查询没有得到答复 我正在使用 Lucene 开发图书搜索 api 用户可以搜索标题或描述字段包含 C F A 的书籍 我正在使用 StandardAnalyzer 以及停用词列表 我使用 MultiFieldQu
  • 在python中删除链表中的节点

    删除链表中的节点 这个实现有什么问题 def delete self val tmp self head prev None while tmp if val tmp data self size 1 if prev None self h
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 在elasticsearch中转义特殊字符

    我正在使用Elasticsearch python 客户端 https elasticsearch py readthedocs io en master 对我们托管的 elasticsearch 实例进行一些查询 我注意到一些字符需要转义
  • Lucene 4.0 中的术语频率

    尝试使用 Lucene 4 0 计算词频 我的文档频率工作得很好 但不知道如何使用 API 来执行术语频率 这是我的代码 private static void addDoc IndexWriter writer String conten
  • 我可以用 Java 在邮件服务器上执行搜索吗?

    我正在尝试使用 Java 搜索我的 Gmail 使用 JavaMail 我可以通过消息搜索来执行消息 如下所示 Properties props System getProperties props setProperty mail sto
  • 使用 PHP MySql 进行关键字搜索?

    我的 mysql 表中有标题 varchar 描述 text 关键字 varchar 字段 我保留了关键字字段 因为我认为我只会在这个字段中搜索 但我现在需要在所有三个字段中进行搜索 所以对于关键字 word1 word2 word3 我的
  • simplexml_load_file 在 Solr 的 url 中带有 &(与号)

    我正在使用 Solr 并有以下查询 该查询在我的浏览器中运行良好 http www someipaddress com 8983 solr select q fq shopid 40 start 0 rows 18 fq manufactu
  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • Elasticsearch:带有停用词消除功能的带状疱疹

    我正在尝试实现一个 Elasticsearch 映射来优化大量文本中的短语搜索 根据中的建议本文 http www elasticsearch org blog searching with shingles 我使用 shingle 过滤器
  • Lucene 4.4.0新增ControlledRealTimeReopenThread示例使用

    在新的 Lucene 4 4 0 版本中 近实时管理器 org apache lucene search NRTManage 已被替换为受控实时重开线程 https issues apache org jira browse LUCENE
  • 算法 - 树中所有节点的最大距离

    所以 找到树中两个节点之间的最长路径相当容易 但我想要的是找到从节点出发的最长路径x到树中的另一个节点 对于所有x 这个问题也可以用以下方式表达 计算从给定的树中可以生成的所有有根树的高度 One way of course is to j
  • Solr 突出显示是否还可以指示返回片段在原始字段内的位置或偏移量?

    背景 使用Solr 4 0 0 我已经对一组示例文档的文本建立了索引并启用了术语向量 以便我可以使用快速向量突出显示
  • Lucene.Net 下划线导致令牌分裂

    我已将 MsSqlServer 数据库表 视图和存储过程编写到目录结构中 然后使用 Lucene net 对其进行索引 我的大多数表 视图和过程名称都包含下划线 我使用标准分析器 如果我查询名为 tIr 的表例如 发票 tnWtn01 我收
  • lucene 如何与 Neo4j 配合使用

    我是新来的Neo4j and Solr Lucene 我读到我们可以在 Neo4j 中使用 lucene 查询 这是如何工作的 Neo4j中使用lucene查询有什么用 我还需要一个建议 我需要编写一个应用程序来搜索和分析数据 which
  • JIRA JQL 按日期搜索 - 有没有办法获取 Today()(日期)而不是 Now()(日期时间)

    我正在尝试在 JIRA 中基于以下内容创建一些问题过滤器CreateDate 我能找到的唯一日期 时间函数是Now 以及与之相关的搜索 即 1d 4d 等 唯一的问题是 Now 是特定于时间的 因此无法获取特定日期创建的问题 i e Cre
  • PHP 搜索部分字符串

    如何在键入时搜索部分字符串 不使用 MySQL 例如 MySQL 中的 LIKE 函数 但在搜索字符串时使用 PHP 例如 但这显然行不通 但是有没有一个函数可以搜索部分字符串 那太好了 EDIT 如果它在数组中怎么办 如果我使用 strp
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • Django:Haystack 或 ORM

    在一个项目中 我实现了 Haystack 但现在我想知道使用 Haystack 相对于 ORM 有何优缺点 对于我的项目 我需要按书名和 isbn 查找书籍 我想如果你必须进行全文搜索 Haystack 会更有用 或者我是否遗漏了一些东西

随机推荐