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