我正在使用Apache Lucene的版本4.4 。
我的系统将一组文档编入三个不同的字段:文档的标题,描述和作者。< / p>
我希望文档能够获得更高的分数,它具有更高的查询字词频率。但是,当该术语是作者字段的一部分时,我只是希望它充当&#34; boolean&#34 ;;也就是说,如果该术语仅出现一次或多次,则添加相同的分数。例如,如果一个文档的三个作者姓氏为#34;史密斯&#34;,则只应给出一个匹配。
为此,我找到了以下代码,它覆盖了术语频率:
Similarity sim = new DefaultSimilarity() {
@Override
public float tf(float freq) {
return freq == 0 ? 0 : 1;
}
};
searcher.setSimilarity(sim);
但是,这会覆盖三个字段。如何设法覆盖单个作者字段?
答案 0 :(得分:3)
您可以实施PerFieldSimilarityWrapper,如下所示:
public class MyCustomSimilarity extends PerFieldSimilarityWrapper {
@Override
public Similarity get(String fieldName) {
if (fieldName.equals("author")) {
return new CustomAuthorSimilarity();
}
else {
return new DefaultSimilarity();
}
}
}