一.简介  

  寻找匹配的文档是构建优质搜索体验的关键步骤,但这仅仅是第一步。大多数用户不愿意通过逐页翻阅搜索结果来找到想要的文档。根据一般经验,仅有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基础理论【相关度计算】的更多相关文章

  1. Solr基础理论【排名检索、查准率、查全率】

    一.排名检索 搜索引擎代表了基于查询,返回优先文档的一种方法.在关系型数据库的SQL查询中,表的一行要么匹配一个查询,要么不匹配,查询结果基于一列或多列排序.搜索引擎根据文档与查询匹配的程度为文档打分 ...

  2. TF-IDF算法--关键词句和文本集中每篇文章相关度计算

    关键词句和文本集每篇文章相关度计算:假设语料库中有几万篇文章,每篇文章的长度不一,你任意输入关键词或句子,通过代码以tf-idf值为准检索出来相似度高的文章. 1.TF-IDF概述 TF-IDF是一种 ...

  3. Solr基础理论与维护管理快速上手(含查询参数说明)

    1. solr基础 因为 Solr 包装并扩展了 Lucene,所以它们使用很多相同的术语.更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容.通过对 Solr 进行适当的配置,某些 ...

  4. Solr基础理论【倒排索引,模糊查询】

    一.简介 现有的许多不同类型 的技术系统,如关系型数据库.键值存储.操作磁盘文件的map-reduce[映射-规约]引擎.图数据库等,都是为了帮助用户解决颇具挑战性的数据存储与检索问题而设计的.而搜索 ...

  5. Solr查询和过滤器执行顺序剖析

    一.简介 Solr的搜索主要由两个操作组成:找到与请求参数相匹配的文档:对这些文档进行排序,返回最相关的匹配文档.默认情况下,文档根据相关度进行排序.这意味着,找到匹配的文档集之后,需要另一个操作来计 ...

  6. Solr搜索结果高级设置

    一.选择响应格式 XML是Solr的默认响应格式.从Solr的角度看,什么样的响应格式并不重要.Solr可以返回XML.JSON.Ruby.Python.PHP.二进制Java等,甚至是自定义格式.使 ...

  7. 三【相关度 相似度查询与计算】相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度

    记录下,在上2回的数据基础之上,附带一个互信息(MI,Mutual Information)可以计算词之间的相关度 标准互信息 MI(X,Y)=log2p(x,y)/p(x)p(y) 值越大于0 则趋 ...

  8. solr 添加索引

    添加索引模板: <add> <doc> <field name="employeeId">05991</field> <fie ...

  9. Solr初步学习

    Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境 ...

随机推荐

  1. Pandas | 20 级联

    Pandas提供了各种工具(功能),可以轻松地将Series,DataFrame和Panel对象组合在一起. pd.concat(objs,axis=0,join='outer',join_axes= ...

  2. 简要说明盒子模型和flex布局

    盒子模型:可以看做是一个盒子,包括外边距.边框.内边距.实际内容. flex布局:弹性布局,灵活性好. 当给元素设置display:flex时,它就是flex容器,它的所有子元素自动成为容器成员,称为 ...

  3. 剑指offer 6:链表(从头到尾打印链表)

    链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...

  4. 转载:深度学习在NLP中的应用

    之前研究的CRF算法,在中文分词,词性标注,语义分析中应用非常广泛.但是分词技术只是NLP的一个基础部分,在人机对话,机器翻译中,深度学习将大显身手.这篇文章,将展示深度学习的强大之处,区别于之前用符 ...

  5. [BZ1925] [SDOI2010]地精部落

    [BZ1925] [SDOI2010]地精部落 传送门 一道很有意思的DP题. 我们发现因为很难考虑每个排列中的数是否使用过,所以我们想到只维护相对关系. 当我们考虑新的一个位置时,给新的位置的数分配 ...

  6. Windows安装gmpy2

    我在终端用python2的pip安装gmpy2时显示缺少Visual C++ 9.0 按照其要求,访问他给的网址安装一下 https://pypi.org/project/gmpy2/#files 进 ...

  7. 【Gamma】Scrum Meeting 9

    目录 写在前面 进度情况 任务进度表 燃尽图 照片 写在前面 例会时间:6.7 22:30-23.00 例会地点:微信群语音通话 代码进度记录github在这里 进度情况 任务进度表 注:点击链接跳转 ...

  8. 让sentinel-dashboard支持nacos

    以sentinel-1.7.0为例 下载源码,idea打开. 找到sentinel-dashboard这个项目 在该项目下的pom.xml文件中找到: <!-- for Nacos rule p ...

  9. 《Linux就该这么学》培训笔记_ch00_认识Linux系统和红帽认证

    <Linux就该这么学>培训笔记_ch00_认识Linux系统和红帽认证 文章最后会post上书本的笔记照片. 文章主要内容: 认识开源 Linux系统的种类及优势特性 认识红帽系统及红帽 ...

  10. 【mysql】搜索带\字符

    模糊查询 LIKE '%\\\%'