如何使用Solrj指定多个排序字段?

时间:2016-05-13 15:43:37

标签: solrj solr4

我有一个使用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中有一个错误

2 个答案:

答案 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
相关问题