solr 排序与文档分数计算

solr

何为文档?

solr是一个文档存储与检索引擎,提交给solr处理的每一份数据都是一份文档。在solr的schema文件中我们可以指定字段的名称和类型,一个文档我们通过定义schema,映射为特定类型的字段集合,文档的每个字段都根据其字段类型进行内容分析,分析的结果保存在索引中,这样在发起查询的时候就能检索到相关结果。

倒排索引:

在传统的数据库模型中,都是文档映射至内容,而solr使用了索引将内容映射至文档的方式。

模糊查询机制:

当通配符搜索执行时,倒排索引中的所有词项与第一个通配符之前的查询词部分进行匹配。接下来,检查每个候选词项是否与查询中的通配符模式相匹配。

一般通配符前指定越多的词查询速度越快,如engineer*的执行花销不大,但是e*执行花销很大。在solr不建议用首位通配符,如*ing,这个会导致严重的性能问题。

默认相似度:

solr的相关度得分是基于similarity类的,默认的similarity实现及理论基础如下:

它会去检查词项向量的余弦相似度,如果词项向量的余弦相似度和文档向量的余弦相似度更接近,那么我们认为它们的相似度越高。

  那么如何用构造合理的向量来表征它们呢?

词项频次tf(term frequency):

我们认为一个查询词项在一个文档中出现的越多,那么我们认为它和这个文档越相关。但是如果一个词在文档中出现10次,我们并不认为相关度应该提高10倍,所以这里开了平方根来减少查询词项多次出现的额外加分。

反向文档频次idf(inverse document frequency):

一般来说在查询匹配中我们认为较少见的词比常见的词有更好的区分度,它惩罚了在多个文档中普遍出现的词项。(感觉要视实际情况而定)

词项权重:

在实际的搜索中我们不必完全依赖与solr去计算分数,根据我们的一些经验我们可以自己去调节词项的权重,以符合我们的预期。

规范化因子:

solr默认的相关度公式计算了三种规范化因子:字段规范、查询规范和协调因子

(1)字段规范:

其中d.getBoost()为文档的权重,

f.getBoost()表示字段权重

lengthNorm(f)表示长度归一参数取值等于字段中词项数量的平方根,目的是消除特定词项在较长文档中出现次数较多的优势,

(2)查询规范:

queryNorm应用于所有的文档,它不会影响总体的相关性排序,它仅仅作为查询之间进行比较时得分计算的规范化因子。

(3)协调因子:

它的作用是衡量每个文档匹配的查询数量,如果查询词项是4个词,那么如果4个词全匹配到,则协调因子是4/4;匹配到3个,那么协调因子是3/4,以此类推。

时间: 2024-10-14 03:11:48

solr 排序与文档分数计算的相关文章

Solr的总结文档

Solr的总结文档 一.    综述 预研使用solr已经一段时间,最近由于工作原因,在研究hadoop内的spark,因此solr就暂时告一段落,在此对前端时间对solr的使用和理解做一个总结,毕竟我现在也只略知皮毛,并未精通,未来再切换频道回索引时我也方便查阅 文章从solr安装使用.solr/lucene源码结构.索引理论基础这三个方向进行说明.文章将逐步完成. 二.    Solr安装使用 Solr是基于lucene的开源搜索平台,它可以对多种类型数据(pdf,txt等)建立索引,并提供

Solr开发参考文档(转)

Solr开发文档 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索功能加入到 Web 应用程序中. 开发环境: System:Windows WebBrowser:IE6+.Firefox3+ JDK:1.6+ JavaEE Server:tomcat5.0.2.8.tomcat6 IDE:eclipse.MyEclipse 8 开发依赖库: JavaEE 5.s

基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档

基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档 内容来源于开源项目: http://git.oschina.net/xautlx/nutch-ajax https://github.com/xautlx/nutch-ajax 如何阅读本文档 本教程文档原始基于Markdown编写,如果你熟悉Markdown文件及相关工具使用,可以直接通过Markdown阅读或编辑工具查看本教程.md格式文件. 由于Markdown语法暂时没有目录支持,如果希望以目录导航方式查看文档,可参考如下

python 分词计算文档TF-IDF值并排序

文章来自于我的个人博客:python 分词计算文档TF-IDF值并排序 该程序实现的功能是:首先读取一些文档,然后通过jieba来分词,将分词存入文件,然后通过sklearn计算每个分词文档中的tf-idf值,再将文档排序输入一个大文件中 依赖包: sklearn jieba 注:此程序参考了一位同行的程序后进行了修改 # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import os

搜索引擎的检索模型-查询与文档的相关度计算

1. 检索模型概述 搜索结果排序时搜索引擎最核心的部分,很大程度度上决定了搜索引擎的质量好坏及用户满意度.实际搜索结果排序的因子有很多,但最主要的两个因素是用户查询和网页内容的相关度,以及网页链接情况.这里我们主要总结网页内容和用户查询相关的内容. 判断网页内容是否与用户査询相关,这依赖于搜索引擎所来用的检索模型.检索模型是搜索引擎的理论基础,为量化相关性提供了一种数学模型,是对查询词和文档之间进行相似度计算的框架和方法.其本质就是相关度建模.如图所示,检索模型所在搜索引擎系统架构位置: 当然检

sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID

转自:http://github.tiankonguse.com/blog/2014/12/03/sphinx-token-inverted-sort.html 外部排序 现在我们的背景是有16个已经排序的数据存在磁盘上.由于数据量很大,我们不能一次性全部读进来. 我们的目标是依次挑出最小的hit,然后交给索引引擎处理. sphinx 使用了 CSphHitQueue 这个数据结构. CSphHitQueue 你猜是什么? 队列? 恭喜你,猜错了.CSphHitQueue 是一个最小堆.且堆的最

学习排序算法(一):单文档方法 Pointwise

学习排序算法(一):单文档方法 Pointwise 1. 基本思想 这样的方法主要是将搜索结果的文档变为特征向量,然后将排序问题转化成了机器学习中的常规的分类问题,并且是个多类分类问题. 2. 方法流程 Pointwise方法的主要流程例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHVxdXRvZ2V0aGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity

Lucene in action 笔记 term vector——针对特定field建立的词频向量空间,用cos计算针对该field的文档相似度

摘自:http://blog.csdn.net/fxjtoday/article/details/5142661 Leveraging term vectors所谓term vector, 就是对于documents的某一field,如title,body这种文本类型的, 建立词频的多维向量空间.每一个词就是一维, 这维的值就是这个词在这个field中的频率. 如果你要使用term vectors, 就要在indexing的时候对该field打开term vectors的选项: Field op

下载Lucene4.X实战类baidu搜索的大型文档海量搜索系统(分词、过滤、排序、索引)

Lucene是一个高性能.可伸缩的信息搜索(IR)库.目前最新版本是4.3.1. 它可以为你的应用程序添加索引和搜索能力.Lucene是用java实现的.成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License].同样,Lucene是当前非常流行的.免费的Java信息搜索(IR)库. Lucene4.X实战类baidu搜索的大型文档海量搜索系统(分词.过滤.排序.索引),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:htt