一:相似度算法
lucene采用的是基于VSM(向量空间模型)的相似度算法, 查询向量(query vector)与搜索出来的文档向量(document vector) 形成N个夹角,计算q 和d 之间的夹角,最小的 就是相
似度最高的。
二:lucene的打分公式
看下lucene的打分公式:
tf: 一个term在一个文档中出现的次数
idf:一个term在多少个文档中出现过
t.getBoost:lucene自有的权重配置,默认为1
norm:字段标准化。
在Lucene中score简单说是由
tf * idf * boost * norm 计算得出的。
代码实现,必要时可以重写代码。在Lucene的DefaultSimilarity类
1:协调coord(q,d)
@Override
public float coord(int overlap, int maxOverlap) {
return overlap / (float)maxOverlap;
}
2:queryNorm(q) 查询规范 (对排序没有任何影响)
/** Implemented as <code>1/sqrt(sumOfSquaredWeights)</code>. */
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float)(1.0 / Math.sqrt(sumOfSquaredWeights));
}
3:tf 单个文档词频
函数图:
只在商品名称中出现了1次。。他的tf =1
Math.sqrt 取平方根 Math.sqrt(9)=3.0如果搜索“笔记本” ,在分类和商品名称中都出现了 他的tf 就是1.414 (2次的平方根)只在商品名称中出现了1次。。他的tf =1
@Override
public float tf(float freq) {
return (float)Math.sqrt(freq);
}
4:idf(t) 一个term在多少个文档中出现过
numDocs 总文档数 docFreq 在多少文档中出现过
如果搜索“笔记本” ,总文档有1000个 ,,出现100次。。那么idf=2
如果出现10次 那么其idf =3
idf 越高、在总文档数中 该词出现的频率越低
5:t.getBoost() 权重
6:norm(t,d) 标准化
对term和文档的字段长度进行标准化计算 ,如果字段的长度越长,那么该值越低。
@Override
public float lengthNorm(FieldInvertState state) {
final int numTerms;
if (discountOverlaps)
numTerms = state.getLength() - state.getNumOverlap();
else
numTerms = state.getLength();
return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));
}
电商体验:
在电商搜索中。一般基于VSM算法推导出来的lucene算法的tfidf会被忽视,应为这两个值没有用的。真正用到的是boost算法和norm算法。。主要作用还是boost算法。还有
solr的一个bf参数。。一个函数计算值
分享到:
相关推荐
深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制
lucene打分公式解释,非常详细,帮助理解搜索ranking.
NULL 博文链接:https://allenson933.iteye.com/blog/1472948
本文档详细介绍了lucene中的评分公式以及每个部分的作用,以及如何修改评分公式影响打分。
NULL 博文链接:https://xiangtui.iteye.com/blog/1177388
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
lucene 自定义评分 实现 增加自定义的权重
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
相似度评分算法是Lucene引擎中的核心部分之一。对Lucene内部的相似度评分算法进行研究分析后,针对Lucene只关心查询词出现的频率,而不关心它们所在的位置这一缺陷提出了一种改进的算法。改进的算法将词语位置关系...
Lucene3.0特性Lucene3.0特性
lucene学习教程lucene讲义 叫你用lucene算法
lucene3源码分析
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
lucene
描述了Lucene中如何使用FST算法构建term的内存索引,使用了很多图,直观的展现了FST图的构建流程,能够对想了解lucene内部实现机制原理的同学有帮助。
Annotated Lucene 中文版 Lucene源码剖析
lucene
《Lucene实战(第2版)》基于Apache的Lucene 3.0,从Lucene核心、Lucene应用、案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene、建立索引、为应用程序添加搜索功能、高级搜索技术、扩展搜索、使用Tika提取文本...