我总是希望给精确匹配的分数高于那些只匹配前缀的分数(例如,“ball”在与“ball *”匹配时应该给出更高的分数而不是“ballistic”)。
我当前(详细)的方法是在创建PrefixQuery
时总是做两行而不是一行,例如
q.add(new PrefixQuery(new Term("field", t)), Occur.SHOULD);
q.add(new TermQuery(new Term("field", t)), Occur.SHOULD);
有没有办法在不必这样做的情况下获得相同的分数?
答案 0 :(得分:5)
这几乎是实现您所需要的标准方法。类似地,当您使用查询解析器时,您会看到像field:term* field:term^2
这样的模式。
如果你发现自己重新创建了这个逻辑,我只想创建一个自定义前缀查询来使用,类似于:
public class MyPrefixQuery extends BooleanQuery {
public MyPrefixQuery(Term t){
add(new PrefixQuery(t), Occur.SHOULD);
add(new TermQuery(t), Occur.SHOULD);
}
}