Solr基础理论【相关度计算】
一.简介
寻找匹配的文档是构建优质搜索体验的关键步骤,但这仅仅是第一步。大多数用户不愿意通过逐页翻阅搜索结果来找到想要的文档。根据一般经验,仅有10%的用户在网页搜索中有意愿继续翻阅第一页以后的搜索结果,仅有1%的用户会翻看到第三页结果。Solr实现了搜索结果排序,最佳的结果位于列表顶端。它会计算每个文档的相关度得分,并从高到低对搜索解决进行排序。
二.默认相似度
solr的相似度得分基于Similarity类。这个类被定义为一个预置字段。Similarity是一个Java类,它根据给定的查询定义了搜索结果相关度得分的计算方法,可以自定义。
默认情况下,solr使用lucene相应的DefaultSimilarity类。这个类使用两段检索模型来计算相似度。首先,使用布尔模型过滤出不符合用户查询的所有文档。然后,使用向量空间模型通过计算和绘制将查询条件和命中的文档转化为向量,在此基础上计算相似度得分。每个文档的相似度得分基于查询向量与文档向量的夹角余弦值【余弦相似度】。余弦值为1,表示完美匹配;余弦值为0,表示无相似性。
三.计算算法
Score(q,d) = ∑(tf(t in d) * idf(t)2 * t.getBoost() * norm(t,d)) * coord(q,d) * queryNorm(q)
t in q
详解:
t = 词项;d = 文档;q = 查询;f = 字段
tf:词频
词频指特定词项在待匹配文档中出现的次数,表示了文档与该词项的匹配程度。一般情况下,若主题在文档中出现多次,则被认为该文档与特定主题更相关。但是,某一词项在文档中的出现次数为10,并不意味着该文档的相关度提升10倍,一般去次数的开平方来计算tf,不同词性对相关度影响较大,像“的”、“了”之类的词在每个文档中出现的次数都普遍较多,应该忽略或降低其影响,这就引入了idf。
idf:逆文档频率
查询词项并非都是平等的,在匹配查询中,较少见的词比常见词具有更好的区分度。因为idf表示词项同时出现在查询和文档中,因此在相关度计算中需要求平方。词频和逆文档频率在相关度计算中起到了相互平衡的作用。词频奖励了在一个文档中出现多次的词项,而逆文档频率惩罚了在多个文档中普遍出现的词项。例如,在英语中的常见词:the,a,of等在任何文档中几乎都会频繁出现,逆文档频率最终会拉低因词频过高而造成的相关度得分。
t.getBoost:词项权重
当有功能需求时,可以在索引阶段或查询阶段相应的调整这些字段或词项的权重以适应功能的需要。例如:title:solr^2.5 AND description:action。
备注:默认权重1.0,若权重小于1.0表示惩罚特定词项。
norm:字段规范化
字段规范是以每个文档为基础的特定字段重要性的因子组合。字段规范在索引创建时进行计算,其表示为solr索引中每个字段的一个附加字节。包含有文档被索引时的权重值、字段被索引时的权重值、惩罚长文档的同时提升短文档的长度归一化【前提是给定关键词在长文档中出现的次数更多,因此要降低因文档长短导致出现比例不同造成的差异】。
d.getBoost()分量表示发送至solr的文档权重,f.getBoost()分量表示字段的权重。solr允许同一个字段被多次添加到文档【执行的背后是将字段的每个单独条目映射到同一个底层的lucene字段】。由于重复的字段最终被映射到同一个底层字段,因此如果该字段存在多个副本,f.getBoost()会成为多个相同名称字段的每个权重相乘的积。除了索引阶段的权重设置之外,长度归一参数也被纳入到字段规范中。长度归一参数取值等于字段中词项数量的平方根。特别注意,文档权重在内部执行时会被赋给该文档的每个字段作为权重。因此,设置文档权重与为该文档中每个字段赋予文档相同的权重值是等价的。所有文档的权重最终存储在各自文档的每个字段规范中。长度归一化的目的是为了调整长度不同的文档。通常,特定词项在长文档中出现的次数比短文档多,通过归一化可以消除较长文档的这一优势。
coord:协调因子
用于平衡每个文档匹配的查询词项的数量。协调因子的理念是,所有的事物是平等的,包含很多查询词项的文档应该比只包含几个查询词项的其它文档得分更高。
queryNorm:查询规范化
由于同一个queryNorm应用于所有的文档,因此它不影响总体的相关度排序,它仅用于查询之间进行比较时得分计算的规范化因子。该因子是每个查询词项的权重平方之和,再将它与相关度的其余部分进行相乘,从而实现规范化。查询规范不应影响与给定查询相匹配的每个文档的相对权重。
Solr基础理论【相关度计算】的更多相关文章
- Solr基础理论【排名检索、查准率、查全率】
一.排名检索 搜索引擎代表了基于查询,返回优先文档的一种方法.在关系型数据库的SQL查询中,表的一行要么匹配一个查询,要么不匹配,查询结果基于一列或多列排序.搜索引擎根据文档与查询匹配的程度为文档打分 ...
- TF-IDF算法--关键词句和文本集中每篇文章相关度计算
关键词句和文本集每篇文章相关度计算:假设语料库中有几万篇文章,每篇文章的长度不一,你任意输入关键词或句子,通过代码以tf-idf值为准检索出来相似度高的文章. 1.TF-IDF概述 TF-IDF是一种 ...
- Solr基础理论与维护管理快速上手(含查询参数说明)
1. solr基础 因为 Solr 包装并扩展了 Lucene,所以它们使用很多相同的术语.更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容.通过对 Solr 进行适当的配置,某些 ...
- Solr基础理论【倒排索引,模糊查询】
一.简介 现有的许多不同类型 的技术系统,如关系型数据库.键值存储.操作磁盘文件的map-reduce[映射-规约]引擎.图数据库等,都是为了帮助用户解决颇具挑战性的数据存储与检索问题而设计的.而搜索 ...
- Solr查询和过滤器执行顺序剖析
一.简介 Solr的搜索主要由两个操作组成:找到与请求参数相匹配的文档:对这些文档进行排序,返回最相关的匹配文档.默认情况下,文档根据相关度进行排序.这意味着,找到匹配的文档集之后,需要另一个操作来计 ...
- Solr搜索结果高级设置
一.选择响应格式 XML是Solr的默认响应格式.从Solr的角度看,什么样的响应格式并不重要.Solr可以返回XML.JSON.Ruby.Python.PHP.二进制Java等,甚至是自定义格式.使 ...
- 三【相关度 相似度查询与计算】相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度
记录下,在上2回的数据基础之上,附带一个互信息(MI,Mutual Information)可以计算词之间的相关度 标准互信息 MI(X,Y)=log2p(x,y)/p(x)p(y) 值越大于0 则趋 ...
- solr 添加索引
添加索引模板: <add> <doc> <field name="employeeId">05991</field> <fie ...
- Solr初步学习
Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...
随机推荐
- Debian 安装docker
1 $ curl -fsSL get.docker.com -o get-docker.sh 2 $ sudo sh get-docker.sh --mirror Aliyun
- 原生ajax分页,无刷新分页,最简化。超简单,代码最少
<html><script> var page=1; // 页面第一次加载,显示第一页 window.onload=function(){ ajax_go(1) } //分页的 ...
- plv8 centos install steps
install deps yum -y update yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL- ...
- ESA2GJK1DH1K基础篇: 硬件使用说明
开发板板载介绍 一.示意图 1.单片机:STM32C8T6 2.Wi-Fi模块:ESP8266 3.GPRS模块:Air202 4.温湿度传感器:DHT11 5.液晶:OLED(IIC) 6.继电器 ...
- Python语言基础考察点:python语言基础常见考题(一)
一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...
- centos7中将tomcat注册为系统服务
一.准备环境 操作系统:CentOS Linux release 7.6.1810 (Core) tomcat:apache-tomcat-8.5.41.tar.gz 二.编辑catalina.sh ...
- R语言排序 -- sort() order() rank()
order() 的返回值是对应“排名”元素所在向量中的位置.注意返回的不是元素本身,而是元素的位置. sort() 是直接对向量中的元素进行排序,返回的是排序后的元素组成的向量. rank() 是求秩 ...
- 冰多多团队Gamma阶段发布说明
Bingduoduo 语音Coding(Gamma):项目Github地址 Gamma版本新功能介绍 在gamma阶段我们推出了一个更加完整的IDE,完善了部分编辑器功能,并且优化了UI,增添了新的s ...
- 【Gamma阶段】第十次Scrum Meeting
[Gamma阶段]第十次Scrum Meeting 每日任务内容 今日工作任务 明日待完成任务 完成人 准备测试质量保证的展示材料 准备测试展示视频 赵智源 修复热评的子评论BUG 准备前端技术展示材 ...
- 在myecplice中关联svn
1:下载插件 site-1.8.22 2:找到myecplic的安装目录 下的dropins 文件夹(例如:C:\Users\han\AppData\Local\MyEclipse Professio ...