我有一个使用solr的应用程序需要能够对两个字段进行排序。 Solrj api有点令人困惑,提供了多种不同的API。 我正在使用Solr 4.10.4
我试过了:
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 sort = sequence + 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());
我想看的sort子句是:sort = is_cited + asc,sequence + asc solrj API似乎只输出final子句。 我怀疑solrj 4.10中有一个错误
答案 0 :(得分:0)
你可以用addSort替换setSort即
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++))));
}
}
让我知道这是否有效
答案 1 :(得分:0)
查看addOrUpdateSort()
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