2016-06-22 2 views
0

私はニュース検索システムを作るのにSolr 5.3.0を使用しています。私はニュースのこれらの次のフィールドがあるとします。{Solr複数のフィールドの関連性とソートによる並べ替え

  • タイトル
  • コンテンツ
  • NewsType

}

私は会社名の両方と探していますこの検索システムの管理者名。会社名は「Stark Industries」、マネージャー名は「Tony Stark」と言います。私は日付(これが行うのは簡単である)、関連性、および以下のルールで結果をソートしたい:

A:

  1. 用語は、「タイトル」フィールドと「コンテンツ」の両方に存在していることをニュースフィールド。

  2. ニュースは「タイトル」フィールドにのみ存在するとのニュースです。

  3. ニュースは「コンテンツ」フィールドにのみ存在するとのニュースです。

Bに:

  1. ニュース会社名(スターク・インダストリーズ)とマネージャ名(トニー・スターク)の両方が存在すること。

  2. 会社名のみが存在するニュース。

  3. マネージャー名のみが存在するというニュースです。

この順序は、1> 2> 3(1は2の上にあるはずです)である必要があります。そして、AとBは2つの異なる方法でニュースにスコアを付けるべきです。最終的な得点はA * Bに等しいかもしれません。

このコードdefType = edismax & qf=notice_title^200+notice_contentを使用して、「タイトル」フィールドの重みが「コンテンツ」フィールドよりも大きくなります。ですから、「タイトル」フィールドは「コンテンツ」フィールドよりも重要です。

しかし、このようにして、A1> A2> A3であることを確認することはできません。 「タイトル」フィールドのスコアが増加するだけです。 ルールBと同じですが、qfを使用してComany名の重みを増やすことしかできません。

(タイトル& &コンテンツ)の重量を増加させる方法がある場合:(仕入& & ManagerName)が役立つはずです。 (私は両方の分野に両方の用語が存在することを意味しようとする)しかし、この構文はqfでは機能しない。

助けていただければ幸いです。

答えて

0

フィールドにはomitTermFreqAndPositionを設定することができます。これにより、フィールド内の用語の頻度が無視され、その用語がドキュメントに表示される回数に依存しなくなります。

このような厳しいルールを持つよりも、関連性の計算に少し習熟しているほうがよいと言われていますが、関数クエリでソートすることで実装できます。 Using the function queryを使用すると、クエリを単独で発行し、各クエリで並べ替えることができます。

0

これを達成するために、Solrブーストクエリを使用します。

+0

bqフィールドを使用したことを意味しましたか?どのように私たちにできるのか、アイデアや例を挙げたいですか?ありがとうございました! –

+0

すぐに私の答えが更新されます!私も同じSolrを使っているので、彼らはあなたのために働くでしょう –

関連する問題