我有包含少量单词、少量句子和包含大量文本的文档的文档。当用户搜索某些内容时,solr 首先给出文本最少的文档作为最相关的文档,最后给出文本最多的文档。但是对于用户来说,相关性应该是不同的。第一个结果应该是相关的,但也需要包含更多的文本,因为用户需要获得最相关的文档但有更多的文本——阅读一些东西。
那么我怎样才能首先获得相关的文档,但首先是那些有更多文本的文档,而不是那些有几个单词的文档。我正在使用一个文本字段并在其中进行搜索。
我有包含少量单词、少量句子和包含大量文本的文档的文档。当用户搜索某些内容时,solr 首先给出文本最少的文档作为最相关的文档,最后给出文本最多的文档。但是对于用户来说,相关性应该是不同的。第一个结果应该是相关的,但也需要包含更多的文本,因为用户需要获得最相关的文档但有更多的文本——阅读一些东西。
那么我怎样才能首先获得相关的文档,但首先是那些有更多文本的文档,而不是那些有几个单词的文档。我正在使用一个文本字段并在其中进行搜索。
Lucene 使用的DefaultSimilarity类有一个评分算法,有一个 lengthNorm 计算,它可以提升内容较少的文本而不是内容较多的文本。
基本上基于条款的数量。
您可以轻松扩展 Similarity 类以提供 LengthNorm 的自定义实现,从而使基于 NumOfTerms 的计算无效。
然后可以在schema.xml中指定此类,以便核心使用它。
“Sweet one 计算 [min,max] 范围内(“甜蜜点”)内所有长度的恒定范数,而超出此范围的长度则计算出更小的标准值。短于或长于甜蜜点范围的文档将被“惩罚” "
min 和 max 的默认值是 1,所以它不适合你。尝试设置值,例如:-
<similarity class="org.apache.lucene.misc.SweetSpotSimilarity">
<str name="paramkey">param value</str>
</similarity>