0

Solr 5.3.0 を使用してニュース検索システムを作成しています。以下のニュース分野があると仮定します:{

  • 題名
  • コンテンツ
  • 日にち
  • ニュースの種類

}

この検索システムでは、会社名と管理者名の両方を検索しています。会社名を「スターク インダストリーズ」、マネージャー名を「トニー スターク」としましょう。結果を日付 (これは簡単に実行できます)、関連性、および次のルールで並べ替えたいと考えています。

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 を使用して会社名の重みを増やすことしかできません。

(Title && Content):(CompanyName && ManagerName) の重みを増やす方法があれば役立つはずです。(両方の用語が両方のフィールドに存在することを意味しようとしています。) しかし、この構文は qf では機能しません。

どんな助けでも大歓迎です。

4

2 に答える 2

0

フィールドに設定omitTermFreqAndPositionすると、フィールド内の用語の頻度が無視され、ドキュメント内に用語が出現する回数にスコアが依存しなくなります。

そうは言っても、通常は、このような厳格なルールを設定するよりも、関連性の計算をもう少し流暢に行う方がよいのですが、関数クエリで並べ替えることでそれらを実装できます。関数を使用するqueryと、クエリを単独で発行し、各クエリで並べ替えることができます。

于 2016-06-22T10:54:32.300 に答える
0

それを実現するには、Solr ブースト クエリを使用します。

于 2016-06-30T19:21:13.313 に答える