私は、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++))));
}
}
そして、これが
はそれを試してみました、動作しませんでした。私は考えることができるすべての順列を試みた。明示的にパラメータを作成するだけで動作するように見えました。 – whomer
本当にこの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>) –
コードは、任意の数のフィールドを処理することになっています。それはあまりにも、solrjだけ最後のものを除くすべてをスローします。また、setSortsメソッドに渡したListを使用するAPIも試しました。あなたはリストを取るメソッドが正しいことをするだろうと思うでしょう。最後のSortClauseを除いてすべてを投げ捨てました。 –
whomer