2016-11-05 3 views
1

Apache Luceneのバージョン4.4を使用しています。Luceneの1つのフィールドで類似性を上書きする方法は?

私のシステムインデックス三つの異なる分野への文書のコレクション:タイトル説明著者(s)は、文書の

私は、より高い得点を得るために、検索用語の頻度を高くしたいと考えています。しかし、その用語が著者フィールドの一部である場合、私は単にそれが "ブール値"として機能するようにしたい。これは、用語が1回または複数回現れる場合に同じスコアを加えることです。たとえば、ある文書の3人の著者が「Smith」という姓を持つ場合、1つの一致が与えられます。このため

、私は用語頻度を上書きし、次のコードを、発見した:

Similarity sim = new DefaultSimilarity() { 
    @Override 
    public float tf(float freq) { 
     return freq == 0 ? 0 : 1; 
    } 
}; 
searcher.setSimilarity(sim); 

はしかし、これは三つのフィールドのために私にそれを上書きします。単一の著者フィールドをオーバーライドするにはどうすればよいですか?

+0

私はインデックスプロセスでそれを解決するために管理。重複する名前を削除するだけです。スマートな解決策ではありませんが、それだけで十分です。誰かが喜ばしい解決策を持っているなら、私はそれに印をつけます。 –

答えて

2

あなたはこのように、PerFieldSimilarityWrapperを実装することができます

public class MyCustomSimilarity extends PerFieldSimilarityWrapper { 
    @Override 
    public Similarity get(String fieldName) { 
     if (fieldName.equals("author")) { 
      return new CustomAuthorSimilarity(); 
     } 
     else { 
      return new DefaultSimilarity(); 
     } 
    } 
} 
関連する問題