2009-08-28 16 views
2

検索を実行する前にQueryオブジェクトでフィールドのブーストを調整することはできますか? 私はそれを行う適切な方法は、インデックス作成中にフィールドのブーストを変更することですが、インデックスを作成するのに約4日かかり、今すぐできることは簡単なハッキングがあるのだろうかと思っていました。検索時のフィールドでlucene setブースト

私は、検索クエリにブーストでハードコーディング試してみましたが、つまり とフィールド(この他の)^ 7

、それが動作し、私は減らしたい場合を除き、それは、それの終わりだろうクエリのこの部分の妥当性、 私は

とフィールド(この他の)^をしたい。1

しかし、私は、空の結果が得られます。

おかげ

+0

私は2番目の部分を得ました.0の前に先行する0が必要です。 –

答えて

2

あなたは類似性を拡張し、サーチャーで、類似性を拡張することによって

setSimilarity(Similarity) 

を使用することができますが、あなたのニーズにLuceneのでスコアリングメカニズムを適応させることができます。

EDIT:

具体的には、あなたが類似でlengthNormメソッド(またはそのサブクラス)をオーバーライドすることができます

public float lengthNorm(String fieldName, int numTokens){ 
    return fieldWeights.get(fieldName)*super.lengthNorm(fieldName, numTokens); 
} 

fieldWeightsは、あなたがしたいウェイトを指定した地図属性かもしれません各フィールドに添付します。 fieldWeightsへの参照をどこかに保持している場合は、検索を実行する直前にフィールドの重みを変更することができます(ただし、一度に1つのクエリに対してのみこれを行います)。

0

なぜあなたは高い値で必要な用語を強調し、あなたがゼロでブーストを解除しようとしているものを残していませんか?

関連する問題