apache solr:由group by生成的数据总和

时间:2010-06-03 12:50:26

标签: lucene solr

我们有一个要求,我们需要按特定字段对记录进行分组并获取相应数字字段的总和

e.x。从userid选择userid,来自user_action group的sum(click_count);

我们正在尝试使用apache solr执行此操作,并发现有两种方法可以执行此操作:

  1. 使用字段折叠功能(http://blog.jteam.nl/2009/10/20/result-grouping-field-collapsing-with-solr/)但发现了2个问题: 1.1。这不是发布的一部分,可以作为补丁使用,因此我们不确定是否可以在生产中使用它。 1.2。我们不会得到这笔钱,但个人数量很多,我们需要在客户端加以总结。

  2. 使用统计数据组件和分面搜索(http://wiki.apache.org/solr/StatsComponent)。这符合我们的要求,但对于非常大的数据集来说还不够快。

  3. 我只是想知道是否有人知道有任何其他方法来实现这一目标。 感谢任何帮助。

    谢谢,

    Terance。

1 个答案:

答案 0 :(得分:5)

为什么不使用StatsComponent? - 可从Solr 1.4上获得。

$ curl 'http://search/select?q=*&rows=0&stats=on&stats.field=click_count' |
  tidy -xml -indent -quiet -wrap 2000000

<?xml version="1.0" encoding="utf-8"?>
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">17</int>
    <lst name="params">
      <str name="q">*</str>
      <str name="stats">on</str>
      <arr name="stats.field">
        <str>click_count</str>
      </arr>
      <str name="rows">0</str>
    </lst>
  </lst>
  <result name="response" numFound="577" start="0" />
  <lst name="stats">
    <lst name="stats_fields">
      <lst name="click_count">
        <double name="min">1.0</double>
        <double name="max">3487.0</double>
        <double name="sum">47912.0</double>
        <long name="count">577</long>
        <long name="missing">0</long>
        <double name="sumOfSquares">4.0208702E7</double>
        <double name="mean">83.0363951473137</double>
        <double name="stddev">250.79824725438448</double>
      </lst>
    </lst>
  </lst>
</response>