2

私は常に、接頭辞のみに一致するものよりも正確な一致に高いスコアを与えたいと考えています (たとえば、「ボール」は、「弾道」よりも「ボール*」と一致する場合に高いスコアを与える必要があります)。

PrefixQuery私の現在の(冗長な)アプローチは、を作成するときに常に1行ではなく2行を実行することです。

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 に答える