陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

 

首先,solr使用的是默认的评分机制,要搞明白lucene默认评分机制,需要首先了解一下lucene的查询对象。

1、termquery

2、boolean query

3、rangequery

其中最重要的是termquery。是lucene的最基本的原子查询。每个查询最后内部都转化为一个个的原子查询。

example:

TermQuery term = new TermQuery("text", "test");

TermQuery term = new TermQuery("title", "test");

记住,term query是针对指定域进行查询的。记住这一点有利于理解lengthNorm()

另外,需要明确一点,lucene会先用bool模型来拿到所有符合条件的document,再将q转化为多个should拼接的termquery去和符合条件的doc进行相似度计算。

 

lucene的打分公式如下:

score(q,d) =  queryNorm(q)  · coord(q,d)  · ∑ (  tf(t in d)  · idf(t)²  · t.getBoost()  · norm(t,d) ) (t in q) 

其中最后一部分求和解释一下:(是对每个termquery,计算其得分最后累加)

tf:对指定域的temquery,在dcoument中出现的次数。

idf:是term在所有文档出现的次数

t.getboost():对每个termquery都可以赋予一个boost

norm:d.getboost()*f.getboost()*lengthNorm(f)其中f是term指定的域

 

下面是简单获取score。注:条件q千万不要带默认的条件*:*,如果是*:*那么相当于条件都一样,score全为1.0。

 

posted on   宏宇  阅读(639)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2017-11-24 .NET自带IOC容器MEF之初体验(转)
2010-11-24 C#3.5自动属性(小技巧)
2009-11-24 分享开发soket经验 我的基于socket的持久层(转)
2009-11-24 各种CMS
2009-11-24 权限小结
2006-11-24 在js中刷新本页
2006-11-24 FormsAuthentication的理解和使用
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示