Java lucene在搜索时对字段设置boost

Java lucene在搜索时对字段设置boost,java,lucene,Java,Lucene,在运行搜索之前,是否可以使用查询对象调整字段的升幅? 我知道正确的方法是在索引期间更改字段boost,但是制作索引需要大约4天的时间,我只是想知道现在是否有一个快速的破解方法 此外,我还尝试了硬编码来增强搜索查询,即 和字段(这个或那个)^7 这样就行了,就到此为止了,不过我想降低这部分问题的相关性, 我想要 和字段(该其他)^.1 但我得到的结果是空的 谢谢您可以扩展相似性,并在搜索器中使用 setSimilarity(Similarity) 通过扩展相似性,您可以根据需要调整Lucene中

在运行搜索之前,是否可以使用查询对象调整字段的升幅? 我知道正确的方法是在索引期间更改字段boost,但是制作索引需要大约4天的时间,我只是想知道现在是否有一个快速的破解方法

此外,我还尝试了硬编码来增强搜索查询,即 和字段(这个或那个)^7

这样就行了,就到此为止了,不过我想降低这部分问题的相关性, 我想要

和字段(该其他)^.1

但我得到的结果是空的


谢谢

您可以扩展相似性,并在搜索器中使用

setSimilarity(Similarity)
通过扩展相似性,您可以根据需要调整Lucene中的评分机制

编辑:

更具体地说,您可以在相似性(或其子类)中重写lengthNorm方法:


fieldWeights可以是一个映射属性,您可以在其中指定要附加到每个字段的权重。如果在某个地方保留对字段权重的引用,则可以在执行搜索之前将字段权重更改为所需的任何值(但一次只对一个查询执行此操作,以进行实验)。

为什么不将所需的项增加一个更高的值,并将试图取消增加的项保留为零?

好的,我得到了第二部分,需要在前面加0,即0.1而不是.1
public float lengthNorm(String fieldName, int numTokens){
    return fieldWeights.get(fieldName)*super.lengthNorm(fieldName, numTokens);
}