【问题标题】:how to order groups by count in solr如何在solr中按计数排序组
【发布时间】:2013-07-01 17:25:35
【问题描述】:

我想知道如何在 Solr 结果中对组进行排序。我想通过numFound 订购这些组。我看到了如何按分数 here 对组进行排序,但这在我查看的示例中似乎并没有真正产生影响,也不是我想要的。

在 xml 中,您可以看到每个组的编号为 numFound,这就是我想要对组进行排序的依据,例如,我可以在顶部看到最大的组。

<arr name="groups">
<lst>
<str name="groupValue">top secret</str>
<result name="doclist" numFound="12" start="0">
...

感谢任何提示!谢谢!

【问题讨论】:

    标签: solr


    【解决方案1】:

    这是一个老问题,但它可能有两个查询。

    第一个查询:将您分组的字段作为导航状态的一组构面带回。您可以在此处将返回的记录数限制为 0:您只需要方面。您返回的方面的数量应该是您的页面的大小。

    group_id:
         23 (6)
        143:(3)
          5:(2)
    

    第二次查询:应该是记录,所以不需要分面。查询应该是从第一个查询返回的构面字段值的 OR 查询。 (group_id:23 OR group_id:143 OR group_id:5 等等)并按照您用于分组的 id 进行分组。

    排序:重新排序查询 2 中的记录以匹配查询 1 中的顺序。

    就可以了,但我不确定 OR 查询的可扩展性如何。如果您要分页,请记住您可以偏移构面:使用它作为机制而不是偏移记录。

    【讨论】:

      【解决方案2】:

      您可以使用字段进行排序

      考虑一个例子:

      如果您有 5 个 FACETS 和 COUNT 与之关联。 然后您可以使用每个字段的 COUNTS 进行排序。

      它可以适用于普通/非分面字段。

      public class FacetBean implements Category,Serializable {
      
      
      
      private String facetName; //getter , setters
      private long facetCount; // getter , setters
      
      
      public FacetBean(String facetName, long count,) {
      
          this.facetName = facetName;
          this.count = count;
      }}
      

      你的调用方法应该是这样的

      private List<FacetBean> getFacetFieldsbyCount(QueryResponse queryResponse) 
      {
          List<FacetField> flds = queryResponse.getFacetFields();
          List<FacetBean> facetList = new ArrayList<FacetBean>();
          FacetBean facet = null;
          if (flds != null) {
              for (FacetField fld : flds) {
                  facet = new FacetBean();
                  facet.setFacetName(fld.getName());
      
                  List<Count> counts = fld.getValues();
      
                  if (counts != null) {
      
                      for (Count count : counts) {
                          facet.setFacetCount(count.getCount());
                      }
                  }
                  facetList.add(facet);
              }
          }
      
          Collections.sort(facetList,new Comparator<FacetBean>() {
      
              public int compare(FacetBean obj1, FacetBean obj2) {
      
                  if(obj1.getFacetCount() > obj2.getFacetCount()) {
                      return (int)obj1.getFacetCount();
                  } else {
                      return (int)obj2.getFacetCount();
                  }
              }
          });
      
          return facetList;
      }
      

      在同一个URL中他们提到了类似的东西。

      sort -->ex :例如 sort=popularity desc 会导致群组按照人气最高的文档排序

      group.sort --> 你可以在这里申请你的领域。

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        无法对 numFound 进行排序,因为 numFound 不是 Solr 中的字段。
        检查discussion 提到它不受支持,我也没有找到针对该问题开放的 JIRA。

        【讨论】:

          【解决方案4】:

          自从我上次调查以来不可能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-09
            • 1970-01-01
            • 1970-01-01
            • 2012-11-02
            • 1970-01-01
            • 1970-01-01
            • 2013-01-05
            相关资源
            最近更新 更多