2010-06-03 47 views
7

我们必须在这里我们通过一个特定的领域需要我们组的记录,并采取相应的数字字段Apache Solr实现:数据的总和源于组由

e.x.之和的要求根据用户标识从user_action组中选择用户标识符,总和(click_count);

我们正在努力做到这一点使用Apache Solr实现,发现有2种方式这样做的:

  1. 使用字段倒塌功能(http://blog.jteam.nl/2009/10/20/result-grouping-field-collapsing-with-solr/),但发现两个问题与此: 1.1。这不是版本的一部分,可以作为补丁提供,所以我们不确定我们是否可以在生产中使用它。 1.2。我们没有收回这笔款项,而是单独计算,我们需要在客户端进行总结。

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

我只是想知道是否有人知道任何其他方式来实现这一点。 感谢任何帮助。

谢谢,

Terance。

+0

数据集有多大?你是否分割索引? – 2010-06-03 17:36:47

+0

我认为你应该尝试以第二种方式进行基准测试。从Solr 1.4开始,分面非常快。 – 2010-06-06 06:30:13

回答

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>