准确的PrefixQuery得分更高

时间:2013-07-18 12:07:54

标签: java lucene

我总是希望给精确匹配的分数高于那些只匹配前缀的分数(例如,“ball”在与“ball *”匹配时应该给出更高的分数而不是“ballistic”)。

我当前(详细)的方法是在创建PrefixQuery时总是做两行而不是一行,例如

q.add(new PrefixQuery(new Term("field", t)), Occur.SHOULD);
q.add(new TermQuery(new Term("field", t)), Occur.SHOULD);

有没有办法在不必这样做的情况下获得相同的分数?

1 个答案:

答案 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);
    }
}