2

2つの要因に基づいて、apachesolrから取得した結果を並べ替える必要があります。

私たちのシステムには、solr(グループ、プロジェクト、データセット)によってインデックス付けされた3つのエンティティがあり、結果では、最初にデータセットを表示し、次にプロジェクト、次にグループを表示します。しかし、それでも各タイプのスコア値を尊重したいと思います。

したがって、たとえば:結果は次のようになります

  1. スコア0.325のデータセット
  2. 0.282のスコアを持つデータセット
  3. 0.200のスコアのデータセット
  4. スコア0.298のプロジェクト
  5. 0.186のスコアを持つプロジェクト
  6. スコアが0.360のグループ
  7. 0.270のスコアを持つグループ

私はこれをJavaで実行し、 solrjを使用してsolrクエリを作成しています。問題は、SolrQueryオブジェクトに2つの並べ替えフィールドを追加しようとすると、そのうちの1つしか使用していないように見えることです。また、Solrドキュメントにはエンティティの種類を示すものはありませんが、ドキュメントのIDの前にエンティティ名が付いているので、それを使用することを計画していました。

私がこれをどのように達成できるかについて誰かが何かアイデアを持っているなら、私はこれにしばらく立ち往生しているので、それは大いにありがたいです!

よろしくお願いします、-ジェイク。

4

1 に答える 1

7

solrjがソートフィールドの1つだけを使用しているように見える場合は、次SolrQuery#setSortFieldのような方法の代わりにメソッドを使用している可能性がありますaddSortField

solrQuery.addSortField("field1", ORDER.desc);
solrQuery.addSortField("field2", ORDER.desc);

説明したように結果を並べ替えるために、よりクリーンなソリューションは、エンティティタイプに基づく一種の重みを含むフィールドをインデックスに追加することです。次に、そのフィールドを使用して直接並べ替えることができますweight desc, score desc。これを行う前に、重みが常にsolrスコアに勝つ必要があることを確認してください。そうでない場合は、solrスコアに影響を与えるように作業する必要があります。

于 2012-01-30T08:06:41.140 に答える