9

私は 2 つのドキュメントを持っており、Luke を使用して調査しましたStandardAnalyzer

ブースト 1 でドキュメント 1

stored/uncompressed,indexed,tokenized<Description:Nummer ett>
stored/uncompressed,indexed,tokenized<Id:2>
stored/uncompressed,indexed,tokenized<Name:Apa>

ブースト 2 でドキュメント 2

stored/uncompressed,indexed,tokenized<Description:Nummer två>
stored/uncompressed,indexed,tokenized<Id:1>
stored/uncompressed,indexed,tokenized<Name:Apa>

フィールドで apa を検索 名前 ブーストが使用され、正しい順序で返されます。

Document 2 has Score 1,1891
Document 1 has Score 0.5945

検索 ap* 順不同で同じスコアを返します

Document 1 Score 1.0000
Document 2 Score 1.0000

検索 apa* 順不同で同じスコアを返します

Document 1 Score 1.0000
Document 2 Score 1.0000

どうしてこれなの?ワイルドカードを使用しなければならない場合でも、より高いブースト値を持つドキュメントを返したいと考えています。これは可能ですか?

そこにいるすべてのクールなコーダーに乾杯!

これは私が共犯したいものです。

検索文字列と希望一致。ワイルドカードの使用。「ル」+「*」で検索

Document
 Name
 City

たとえば、Lund という名前のドキュメントは、Lunt や City という名前のドキュメントよりも高い評価を得たいと考えています。これは、どのドキュメントが最も人気があるかを知るためです。ストックホルム市とストックホルムとストックホルメンという名前のドキュメントを取得したいのですが、選択したとおりに注文しました。

4

1 に答える 1

10

WildcardQueryはあなたのサブクラスなので、MultiTermQuery一定のスコア1を取得しています。

の定義を確認するとt.getBoost()

t.getBoost()は、クエリテキスト(クエリ構文を参照)で指定された、またはsetBoost()へのアプリケーション呼び出しによって設定されたクエリqの用語tの検索時間のブーストです。複数用語クエリで1つの用語のブーストにアクセスするための直接APIは実際にはありませんが、複数用語はクエリで複数のTermQueryオブジェクトとして表されるため、クエリ内の用語のブーストには、を呼び出すことでアクセスできます。サブクエリgetBoost()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

考えられるハックの1つは、クエリパーサーの書き換えメソッドを設定することです。

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE)
于 2012-04-27T15:13:04.177 に答える