我写了一个小的搜索引擎作为我的每周专题。它基于查询向量和文档向量之间的余弦相似度。矢量是用TF-下手的记号来计算的.
我已经了解了Apache,这是一个全文搜索引擎。我的问题是,在排序搜索结果时,solr内部使用余弦相似性吗?
发布于 2014-07-09 19:47:50
是的,Solr (它运行在Lucene之上)确实使用了余弦相似性。来自Lucene的文档:
查询Q文档d的VSM评分是加权查询向量V(q)和V(d)的余弦相似度。 余弦-相似性(Q,d) = V(q)·V(d) /x-V(Q)_x_(V)=V(D)_x
0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html
发布于 2014-11-18 04:23:02
不是的。Solr使用的是与余弦相似的东西,但并不完全相同--有一些关键的区别。
如果您访问相同的链接(0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html)并进一步向下滚动,您将看到"Lucene概念评分公式“和"Lucene实用评分公式”,这两个公式给出了更多细节。
忽略任何索引/查询时间提升,以下是一些关键的区别:
1.不同文档归一化因子
它使用“document范数”,而不是用tf-国防军向量的欧几里德范数来规范每个文档。对于默认的相似度量(DefaultSimilairty),这只是1/sqrt( doc中的术语数),它基本上等于1/sqrt( sum ( tf )) --即tf是doc中计数项的和--没有与欧几里德范数的平方,而每个项都忽略了以色列国防军。此外,该值被舍入为一个字节,以节省空间。这通常会得到一个不同于归一化因子的余弦相似度的值。
2.额外的"coord“增强
还有一个额外的值乘以分数等于:文档中匹配的查询词的数量/查询中的术语总数。
这为匹配更多查询条件的字段(文档)提供了额外的推动力,并且可能具有值得怀疑的价值。这实质上是将tf-国防军向量分数与另一个内积相乘--这些向量的内积被转换为布尔向量(如果没有给定的项,则为1),而查询向量仅由其欧几里德范数标准化。
发布于 2020-04-06 09:42:29
如果要在Solr中寻找实际的向量相似性,有两种方法: 1)使用分隔的有效载荷。已经有几个插件实现了这一点,比如https://github.com/moshebla/solr-vector-scoring和https://github.com/saaay71/solr-vector-scoring。
2)使用流表达式,这是从盒子里出来的:5/vector-math.html
后者速度较慢,但更为灵活。
https://stackoverflow.com/questions/24661594
复制相似问题