一.简介  

  寻找匹配的文档是构建优质搜索体验的关键步骤,但这仅仅是第一步。大多数用户不愿意通过逐页翻阅搜索结果来找到想要的文档。根据一般经验,仅有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. ABP 从core降到级.net framework

    后台: Application层得先写接口 再写实现,不然 abp.services.app 这个里面就没有该service.并且service保留的接口,就是interface里面定义的接口. 文件 ...

  2. MySQL数据库索引类型、MySQL索引的优化及MySQL索引案例

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  3. win10 将任意文件固定到开始屏幕(最佳办法)

      1.情景展示 以.bat文件文件为例,想将其固定到开始屏幕上,但是选中-->右键,却没有固定到开始屏幕选项,如何将其固定到开始屏幕上呢? 2.解决方案 选中你要固定到开始屏幕上的文件--&g ...

  4. Elasticsearch SQL用法详解

    Elasticsearch SQL用法详解  mp.weixin.qq.com 本文详细介绍了不同版本中Elasticsearch SQL的使用方法,总结了实际中常用的方法和操作,并给出了几个具体例子 ...

  5. 鼠标滚轮滚动慢/拖动Office出现滞后问题处理

    一.说明 我对外设一直不是很了解,买的鼠标今天到了,使用时遇到了两个问题在这里记一下. 二.滚轮滚动慢处理 问题描述:在网页中滚动滚轮每次只能上下移动一点点,感觉很难受. 问题原因:此问题是滚轮滚动一 ...

  6. 【转帖】 PM RD QA OP

    From 百度知道 一.PM: Product Manager,产品经理,又称品牌经理(Brand Manager).举凡产品从创意到上市,所有相关的研发.调研.生产.编预算.广告.促销活动等等,都由 ...

  7. python 计算列表内容出现次数

    """python 计算列表内容出现次数""" #方法一: l = ['a','a','b','c','d','b','b','b'] te ...

  8. git new

    Quick setup — if you’ve done this kind of thing before Set up in Desktop or HTTPSSSH Get started by  ...

  9. 低版本的 eclipse 不支持 tomcat8.5 的解决方法

    目录 低版本的eclipse 不支持 tomcat8.5,但是还想使用的方法 低版本的eclipse 不支持 tomcat8.5,但是还想使用的方法 1. 介绍:   我在使用 mars 版本的 ec ...

  10. linux中常用命令alias

    1.查看系统中所有的命令别名 alias 2.查看指定的别名 alias 别名 2.设定别名 alias 别名='原命令' 3.删除别名 unalias 别名 4.使别名永久生效 vi ~/.bash ...