0

inv=0 (0 から 1000 までの可能な値) を持つすべてのドキュメントを結果セットの最後に降格させたいと考えています。クエリの一部として、name desc などの他の並べ替えオプションもあります。

たとえば、以下は私のsolrドキュメントです

Doc1 : name=apple , Inv=2
Doc2 : name=ball , Inv=1
Doc3 : name=cat , Inv=0
Doc4 : name=dog , Inv=0
Doc5 : name=fish , Inv=4
Doc6 : name=Goat , Inv=5

以下のソートを実現したい...ここでは、inv=0 のすべてのドキュメントを下にプッシュしてから、「name asc」ソートを適用します。

Doc1
Doc2
Doc5
Doc6
Doc3
Doc4

私のsolrリクエストは次のようなものです

bq: "(: AND -inv:"0")^999.0" & defType: "edismax"

ここで 999 は、結果を降格するために付けたランクです。

このブースティング クエリは正常に機能します。inv=0 のすべてのドキュメントを一番下に移動します。

しかし、&sort=name asc を solr クエリに追加すると、bq よりも "sort" が優先されます。以下の結果に "name asc" が表示されています。

Doc1 : name=apple , Inv=2
Doc2 : name=ball , Inv=1
Doc3 : name=cat , Inv=0
Doc4 : name=dog , Inv=0
Doc5 : name=fish , Inv=4
Doc6 : name=Goat , Inv=5

誰でも私を助けてください。?

4

2 に答える 2

3

並べ替えはブーストをオーバーライドします。

したがって、その条件マップをブースト値にすることで、並べ替えをブーストに移動します。

または、 query()構文を使用して、ブースト条件をソートに移動します。これは、hoss による Lucene/Solr Revolution 2016 プレゼンテーション(クリックしてプレゼンテーションを開始)の宝石の 1 つです。

        qq = Harry
         q = +{!edismax v=$qq}
        qf = title actor writer director  keywords
      sort = query($title_sort,0) desc, title asc
title_sort = {!field f=title v=$qq}
于 2016-11-09T03:26:42.433 に答える
1

Solr のデフォルトのソート基準は ですscore desc。ここscoreで、 は仮想フィールドであり、実際にはドキュメントのスコアを表します。
1 つが渡さ&sort=name ascれると、デフォルトの並べ替えが上書きされます。

ここで考えられる解決策は、次のようなものです&sort=score desc, name asc。つまり、最初に並べ替えてください。スコアが等しいドキュメントについては、昇順scoreでタイブレークを作成してください。name

doc1、doc2、doc5、doc6 のスコアが等しい限り、機能するはずです。

そうでない場合は、このSolr Wiki リンクをチェックして、ドキュメントにペナルティを科す方法の詳細を確認してくださいinv:0

于 2016-11-08T22:26:22.393 に答える