2016-05-13 12 views
0

私は、2つのフィールドをソートできるソルを使用するアプリケーションを持っています。 Solrj APIは少し混乱し、複数の異なるAPIを提供します。 は、私が試してみましたSolrの4.10.4Solrjで複数のソートフィールドを指定するにはどうすればよいですか?

を使用しています:

  for (int i = 0; i < entry.getValue().size();) { 
       logger.debug("Solr({}) {}: {} {}", epName, entry.getKey(), entry 
         .getValue().get(i), entry.getValue().get(i + 1)); 
       if (i == 0) { 
        query.setSort(new SolrQuery.SortClause(entry.getValue().get(i++), SolrQuery.ORDER.valueOf(entry.getValue().get(i++)))); 
       } else { 
        query.addSort(new SolrQuery.SortClause(entry.getValue().get(i++), SolrQuery.ORDER.valueOf(entry.getValue().get(i++)))); 
       } 
      } 

私は生成されたURLを見てみると、私は私だけでも作成しようとした

最後SortClauseソート=シーケンス+ ASCを参照してくださいListとsetSorts SolrQueryメソッドがあり、それも単一の並べ替えフィールドとして出力されるように見えます。常に最後のものです。

文字列を使用して手動で生成することで、正しいソート句を作成することができました。

私もaddOrUpdateSortを試しました。私は明らかな組み合わせのほとんどを試してみたと思います。 Solrj APIのメソッドの使用。

これが行う作業:

  StringBuilder sortString = new StringBuilder(); 
      for (int i = 0; i < entry.getValue().size();) { 
       if (sortString.length() > 0) { 
        sortString.append(","); 
       } 
       logger.debug("Solr({}) {}: {} {}", epName, entry.getKey(), entry 
         .getValue().get(i), entry.getValue().get(i + 1)); 
       sortString.append(entry.getValue().get(i++)).append(" "). 
        append(SolrQuery.ORDER.valueOf(entry.getValue().get(i++))); 
      } 
      query.set("sort",sortString.toString()); 

私が見たいと思ってソート句がある:ソート= is_cited + ASC、シーケンス+ ASC solrj APIは出力のみ最終節に思えます。 私はaddSortすなわち

 for (int i = 0; i < entry.getValue().size();) { 
      logger.debug("Solr({}) {}: {} {}", epName, entry.getKey(), entry 
        .getValue().get(i), entry.getValue().get(i + 1)); 
      if (i == 0) { 
       query.addSort(new SolrQuery.SortClause(entry.getValue().get(i++), SolrQuery.ORDER.valueOf(entry.getValue().get(i++)))); 
      } else { 
       query.addSort(new SolrQuery.SortClause(entry.getValue().get(i++), SolrQuery.ORDER.valueOf(entry.getValue().get(i++)))); 
      } 
     } 

そして、これが

答えて

0

することができます代替setSortのバグを疑う)

Updates or adds a single sort field specification to the current sort 
information. If the sort field already exist in the sort information map, 
its position is unchanged and the sort order is set; if it does not exist, 
it is appended at the end with the specified order.. 

@return the modified SolrQuery object, for easy chaining 
@since 4.2 
+0

はそれを試してみました、動作しませんでした。私は考えることができるすべての順列を試みた。明示的にパラメータを作成するだけで動作するように見えました。 – whomer

+0

本当にこのquery.addSort(新しいSolrQuery.SortClause(entry.getValue()。get(i ++)、SolrQuery.ORDER.valueOf(entry.getValue()。get(i ++))))));を実行しますか? このクエリではありません。addSort(新しいSolrQuery.SortClause(entry.getValue()。get(i)、SolrQuery.ORDER.valueOf(entry.getValue()。get(i)))));両方の時刻で正しく評価されます(1つはi = 0で、もう1つはi = 0のために新しいSolrQuery.SortClause(entry.getValue()。get(i ++)、SolrQuery.ORDER.valueOf(entry.getValue()。get(i ++))) 0>) –

+0

コードは、任意の数のフィールドを処理することになっています。それはあまりにも、solrjだけ最後のものを除くすべてをスローします。また、setSortsメソッドに渡したList を使用するAPIも試しました。あなたはリストを取るメソッドが正しいことをするだろうと思うでしょう。最後のSortClauseを除いてすべてを投げ捨てました。 – whomer

0

(addOrUpdateSortをチェックアウトを働いていた場合、私に知らせてとsolrj 4.10

関連する問題