2012-03-22 9 views
8

私の場合、ドキュメントには「タイトル」と「ビュー」の2つのフィールドがあります。 「ビュー」は、人々がこの文書を訪れた回数で表されます。 like: "title": "iphone"、 "views": "10" 関連性スコアはスコア(タイトル)* 0.8 +スコア(ビュー)* 0.2で計算されるなど、ビューにいくつかの重みを割り当てる戦略を開発する必要があります。 luceneはこれを行うことができますか?そして、この質問に関連するアルゴリズムがいくつかあるかどうかを知りたい。Lucene:特定のフィールドを増やす方法

答えて

10

ここでは、あなたがそれを行うことができる方法である。

Query titleQuery, viewsQuery; 

titleQuery.setBoost(0.8); 
viewsQuery.setBoost(0.2); 
BooleanQuery query = new BooleanQuery(); 
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional 
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required 

// use query to search documents 

スコアは(乗法定数に)0.8*score(titleQuery) + 0.2*score(viewsQuery)に比例することになります。

viewsフィールドを活用するには、おそらくValueSourceQueryを使用する必要があります。

+0

私がそれを理解していれば、correctyl setBoostは廃止され、最近ではhttps://lucene.apache.org/core/5_5_0/core/org/apache/lucene/search/BoostQuery.html shoudlが使用されています – Dannyboy

5

3つの方法でブーストすることができます。インデックス付けながら - - 文書がインデックスに追加される前に、 document.setBoost()を呼び出すことで、ニーズに応じて、あなたが後押し組み合わせ

ドキュメントレベルを採用する場合があります。

文書にフィールドを追加する前に(そして文書をインデックスに追加する前に) field.setBoost()を呼び出すことによって、文書のフィールドレベルブースティング - インデックス作成中 -

クエリレベルブースティング - 検索中に、クエリ句にブーストを設定して、 Query.setBoost()を呼び出します。

ソース:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

+0

document.setBoost()は古くから使用されていません。 – Dannyboy

関連する問題