Solr基础理论【排名检索、查准率、查全率】
一.排名检索
搜索引擎代表了基于查询,返回优先文档的一种方法。在关系型数据库的SQL查询中,表的一行要么匹配一个查询,要么不匹配,查询结果基于一列或多列排序。搜索引擎根据文档与查询匹配的程度为文档打分,并按降序返回结果。匹配程度的计算取决于多个因素,一般而言,文档得分越高意味着该文档与查询的相关性越强。
在Solr中会存在单独的字段保存相关性,那就是score字段。在score字段的得分数值并非具有绝对意义,它在lucene内部仅作为相对排名,而且同一文档在不同的查询中的得分并无关系。也就是说,与查询匹配的文档相关度得分仅适用于该查询。返回的结果按照得分从低到高排序,文档得分越高。说明与该查询越相关。
优点:
1.提供清晰的导航方式,把用户越需要的放在越靠前的位置。
2.智能化程度高,用户无需考虑排序问题。
二.查准率
查准率【Precision,精度性的度量】的具体定义如下:正确匹配的文档数量/返回的文档数量【介于0.0~1.0之间】,例如:


假设某次搜索返回的文档集合为文档1、2、3,那么该查询的查准率为1.0【3个正确匹配/3个全部匹配】,这是理想状态。但是,如果返回全部6个结果,那么查准率仅为0.5,因为返回的结果中有一半是不相关的。同样地,如果只返回一个相关文档【比如文档1】,那么查准率依然是1.0,因为返回的结果都是匹配的。可见,查准率是衡量结果与查询是否相关的一个指标,但是它并不关注全面性,即使只返回了100个匹配文档中的1个,查准率依然为1.0【返回的文档中没有不匹配文档】。由于查准率仅考虑了返回结果的整体精确性,而未考虑结果集的全面性,因此需要将查全率与查准率配合使用。
三.查全率
查全率【Recall,全面性的度量,也称召回率】衡量的是搜索结果的全面性。定义如下:返回的正确匹配的文档数/全部正确匹配的文档数。如果仅返回一个匹配文档,则查全率为1/3,因为没有找到其它两个应该匹配的文档【此时查准率为1.0】。
四.查准率与查全率之间的平衡
查准率与查全率的重要区别是,如果返回的结果是正确的,则查准率高;如果正确的结果都被返回了,则查全率高。查准率不关心正确结果是否都被返回出来,而查全率不关心返回的结果是否都是正确的。
虽然查准率与查全率之间存在明显的互逆关系,但它们并不是相互排斥的。在前面的示例中,如果只返回全部匹配文档【文档1、2、3】,那么查准率和查全率就都是1.0。这是因为所有匹配且无不陪配的文档被返回了。
最大限度提升查准率与查全率是绝大多数搜索相关度优化的最终目标。人为或手动调整结果集看似简单,但事实上,这是一个具有挑战性的难题。Solr采用了许多技术用于提高查准率和查全率,其中大部分技术更倾向于提高返回完整文档集的查全率。合适的文本分析【找到词汇的多个变体】可以寻找更多匹配结果,但如果文本分析力度过大,匹配到了错误的词汇变体,那么这些额外的匹配结果可能会影响查准率。
Solr中平衡查准率与查全率的一种常见方式是在整个结果集上计算查全率,仅在搜索结果第一页【或前几页】上计算查准率。根据这一模型,调整Solr的相关度评分的计算方式,让更好的匹配结果被提升到搜索结果的顶部,而许多不良的匹配出现在搜索结果的底部。
如何做到查准率与查全率的最佳平衡,最终取决于现实情。在法律方面的搜索,查全率的重要性更高,因为如果遗漏了文档,就可能会导致一定的法律后果。对于其它现实需求而言,可能仅仅找到一些最佳匹配就可以了。若没有找到最佳匹配,返回为空即可。
大多数搜索应用处于两个极端之间。由于大多数情况下没有所谓的正确答案,所以在查准率与查全率之间取得适度平衡成为一项长期的挑战。不管怎样,理解查准率与查全率以及如何在两者之间做出调整,使得杠杆向某一遍倾斜【另一边上升】,是有效改进搜索结果质量的关键。
五.不适宜使用solr的情况
1.经常需要返回大量文档的情况。搜索引擎一般会为每个查询返回一小部分文档集合,通常为10~100个。同一查询的更多文档可以通过solr内置的分页功能获取。当需要返回大量匹配数据时,查询本身可能执行的很快,但从底层索引结构上重构大量文档时速度极其缓慢。
2.进行深度分析任务。这需要访问大量索引,即使通过分页解决上述问题,底层索引的数据结构也并不适合一次检索大量索引。
Solr基础理论【排名检索、查准率、查全率】的更多相关文章
- Solr基础理论与维护管理快速上手(含查询参数说明)
1. solr基础 因为 Solr 包装并扩展了 Lucene,所以它们使用很多相同的术语.更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容.通过对 Solr 进行适当的配置,某些 ...
- solr系统query检索词特殊字符的处理
solr是基于 lucence开发的应用,如果query中带有非法字符串,结果很可能是检索出所有内容或者直接报错,所以你对用户的输入必须要先做处理.输入星号,能够检索出所有内容:输入加号,则会报错. ...
- 我的solr学习笔记--solr admin 页面 检索调试
前言 Solr/Lucene是一个全文检索引擎,全文引擎和SQL引擎所不同的是强调部分相关度高的内容返回,而不是所有内容返回,所以部分内容包含在索引库中却无法命中是正常现象. 多数情况下我们 ...
- [转]solr系统query检索词特殊字符的处理
原文地址:http://blog.csdn.net/wgw335363240/article/details/39889979 solr是基于 lucence开发的应用,如果query中带有非法字符串 ...
- Solr基础理论【相关度计算】
一.简介 寻找匹配的文档是构建优质搜索体验的关键步骤,但这仅仅是第一步.大多数用户不愿意通过逐页翻阅搜索结果来找到想要的文档.根据一般经验,仅有10%的用户在网页搜索中有意愿继续翻阅第一页以后的搜索结 ...
- Solr基础理论【倒排索引,模糊查询】
一.简介 现有的许多不同类型 的技术系统,如关系型数据库.键值存储.操作磁盘文件的map-reduce[映射-规约]引擎.图数据库等,都是为了帮助用户解决颇具挑战性的数据存储与检索问题而设计的.而搜索 ...
- 查准率(precision)和查全率(recall)
一.理解查准率(precision)& 查全率(recall) 我们在平时常用到的模型评估指标是精度(accuracy)和错误率(error rate),错误率是:分类错误的样本数站样本总数的 ...
- 【分类问题中模型的性能度量(一)】错误率、精度、查准率、查全率、F1详细讲解
文章目录 1.错误率与精度 2.查准率.查全率与F1 2.1 查准率.查全率 2.2 P-R曲线(P.R到F1的思维过渡) 2.3 F1度量 2.4 扩展 性能度量是用来衡量模型泛化能力的评价标准,错 ...
- Solr调研总结
http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...
随机推荐
- Debian 安装docker
1 $ curl -fsSL get.docker.com -o get-docker.sh 2 $ sudo sh get-docker.sh --mirror Aliyun
- CLR Exception 0xE0434F4D和0xE0434352的区别
<根据<CLR Exception---E0434352>和<CLR Exception---E0434F4D>这两篇随笔,我们会发现,这两个异常太相似了,除了代码值不一 ...
- 分布式环境配置虚拟域名,phpstudy配置虚拟域名,集成环境配置域名,域名禁止访问forbidden怎么解决
重启Apache,测试:
- python输出带颜色字体
方法1: (参考https://suixinblog.cn/2019/01/print-colorful.html) 使用Python中自带的print输出带有颜色或者背景的字符串 书写语法 prin ...
- 8-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Apache 配置SSL,HTTPS连接)
https://www.cnblogs.com/yangfengwu/p/10947423.html 和当时配置MQTT差不多,去下载证书文件 https://www.cnblogs.com/ya ...
- 简要说明盒子模型和flex布局
盒子模型:可以看做是一个盒子,包括外边距.边框.内边距.实际内容. flex布局:弹性布局,灵活性好. 当给元素设置display:flex时,它就是flex容器,它的所有子元素自动成为容器成员,称为 ...
- C语言实现Socket简单通信
环境是linux,不过应该没什么影响,因为只用到了socket的基本用法,没有涉及pthread等. 分为服务器端和客户端,服务器端监听端口发来的请求,收到后向客户端发送一个Hello World,客 ...
- Javascript报错Converting circular structure to JSON
主要是因为对象的互相引用,怎么样才能造成对象的互相引用呢? var a = {}; var b = {}; a.b = b; b.a = a; 怎么解决,反正我试了很多,最后选择深度clone thi ...
- 几句话总结一个算法之DQN
DQN利用深度学习对Q-learning的一个扩展,回顾上篇文章,Q-learning的核心在于Q(s,a)的建模.如果状态s非常复杂,很难通过一张表来存储所有的状态. 深度学习正好可以自动提取s的特 ...
- Shell脚本之四 内建命令
所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件. 可以使用 type 来确定一个命令是否是内建命令: [root@localhost ~]# type ...