2012-01-09 5 views
4

正確な一致がより高い「部分的な」一致にランク付けされるようにするには、どのアナライザを索引付けおよび検索に使用すべきですか?おそらくSimilarityクラスでカスタム得点を設定していますか?私のインデックスは(Luceneの3.5 StandardAnalyzerでインデックス)car partscar、及びcar shopから成り例えば正確な一致を最も高いものとしてランク付けするための最良のルーケン設定

、で"car"結果のクエリ:

  • 自動車部品
  • 車ショップ

(基本的には追加された順序で返されます。すべて同じスコープになるためです再)。

carが最初にランク付けされ、次に他の結果が表示されます(本当にどの順序であってもアナライザが影響を与えるとは限りません)。

答えて

0

クイックハックScoreDoc[]IndexSearcher.searchから取得した後、最初の基準としてscore、2番目の基準として長さ(昇順)で並べ替えます。

+0

'search(query、limit)'メソッドで検索すると、結果がより良く一致する可能性はありますか? – NoMoreMrCodeGuy

+1

@NoMoreMrCodeGuy:はい、そうかもしれません。 –

2

全3つの試合は正確な(一致している用語の車ではなく、「CA」または「AR」)です:)

これらのフィールドには、より多くのコンテンツ(「自動車部品」、「車が」がない場合と"車の店")、lengthNorm()またはcomputeNorm()(Luceneバージョンに応じて)を使用すると、より短いフィールドの重みを増やすことができ、車は短いほど高い得点を得ることができます。 Luceneの3.3.0では、DefaultSimilarity.computeNorm()は次のようになります。

numTermsは、フィールド内の用語の総数である
return state.getBoost() * ((float) (1.0/Math.sqrt(numTerms))); 

。したがって、 "car"はノルムが1であり、 "car shop"は0.7(1のブーストを前提とする)でなければならないため、 "car"と "car shop"の文書のスコアは同じです。

+0

Lucene 3.5はこちら。言及されたスコアは、より良い結果を得るためにカスタム類似クラスに基づいていた可能性があります。しかし、StandardAnalyzerでまだ索引付けされていますが、それに関するコメントはありますか? – NoMoreMrCodeGuy

関連する問題