2

我总是想给精确匹配一个比只匹配前缀的得分更高的分数(例如,“ball”在匹配“ball*”时应该比“ballistic”得分更高)。

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

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

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

4

1 回答 1

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);
    }
}
于 2013-07-18T15:24:49.790 回答