2012-03-29 2 views
2

Luceneには常に一定のスコアが付いていたので、私はブースト値を無視していました。Lucene - 句数に対するスコアリング効果

パーサーのrewriteMethodをSCORING_BOOLEAN_QUERY_REWRITEに設定すると、そのトリックが実行されましたが、私が得意でない 'clauseCount'には奇妙な副作用があります。

私は一定のスコアリングで、maxClauseCountにはデフォルトで1024の問題はありません。動的スコアリングでは、clauseCountは1024をすばやく超えました。なぜそれが本当にかと思います。

誰もがこの技術的な詳細を知っていますか?

「ca *」のようなクエリは「car OR cars」に書き換えられているとの別の記事があります。しかし、常に一定のスコアリングや動的スコアリングを使用していても、常にそうであるべきではないでしょうか?

ありがとうございます!

編集: だから私の解決策です。私はいくつかの問題に遭遇しました。なぜなら、ドキュメントを作成したときに設定した値を上げるドキュメントは、後でドキュメントを取得したときに常に1.0でした。バグかもしれないが、私はこれについては分からない。私が知っているのは、検索者からドキュメントを取得すると、ドキュメントオブジェクトが新しく作成され、ブースト値が設定されないということです。ちょうどフィールド。 C#ポートに関連する可能性があります。 とにかく、元のクエリを使用し、ドキュメントフィールドに設定した最初のブースト値とスコアを掛け合わせたCustomScoreQueryを書きました(厄介な回避策です)。

十分な話があります。私は改善の余地があります。特に私は検索者やフィールドの必要なしに元のブースト値を得ることができました。

public class DynamicBoostingQuery : CustomScoreQuery 
{ 
    private Searcher s; 

    public DynamicBoostingQuery(Query q, Searcher searcher) 
     : base(q) 
    { 
     this.s = searcher; 
    } 

    public override float CustomScore(int doc, float subQueryScore, float valSrcScore) 
    { 
     float val = base.CustomScore(doc, subQueryScore, valSrcScore); 

     try 
     { 
      Document d = s.Doc(doc); 

      float priority = float.Parse(d.Get("raw_categoryPriority")); 

      return val * priority; 
     } 
     catch 
     { 
      return val; 
     }   
    } 
} 
+0

[doc on getBoost](http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/document/Document.html#getBoost())(をご覧ください。 Luceneの優れたアイディアです。ドキュメントブーストは検索時に利用できるものではなく、個々のフィールドの効果的なブーストに掛けられます。多分それはあなたに開かれた道です - Fieldable.getBoostを使用してください。 –

+0

しました。 "検索時に、検索されたドキュメントの場合、このメソッドは常に1を返します。"残念ながら、私の解決策は変わりません。ああ、それほど悪くはない。 :) – Enzi

答えて

1

MultiTermQueryのデフォルト(Javaの上のLucene 3.5で、これが導入された正確なバージョンを知っていない)だけ句とヒットの定義されたしきい値まで及びそれを超えてCONSTANT_SCORE_BOOLEAN_QUERY_REWRITEを使用していますCONSTANT_SCORE_AUTO_REWRITE_DEFAULTは、CONSTANT_SCORE_FILTER_REWRITEに切り替わりれますこれは決してTooManyClausesを発生させません。あなたはそれを覆し、LuceneにBooleanQueryリライトを使用させました。残念ながら、スコアが必要な場合は、フィルタベースのリライトを使用するオプションはありません。

おそらく、CustomScoreQueryを使用してドキュメントのブーストを回復することができます。

+0

ありがとう、ありがとう!現在、SCORING_BOOLEAN_QUERY_REWRITEの検索品質は、何も追加されていない場合でも、CONSTANT_SCORE_AUTO_REWRITE_DEFAULTに比べて実際には悪いです。これを回避するためにCustomScoreQueryを試してみます。 – Enzi

関連する問題