2010-06-03 16 views
7

Mamy wymóg gdzie musimy grupy nasze rekordy od danej dziedzinie i podjęcia sumy odpowiadającej polu numerycznymapache solr: suma danych wynikało z grupy przez

e.x. wybierz userid, sumę (click_count) z user_action group według userid;

Próbujemy to zrobić przy użyciu Apache Solr i okazało się, że były 2 sposoby osiągnięcia tego celu:

  1. użyciu pola funkcji (http://blog.jteam.nl/2009/10/20/result-grouping-field-collapsing-with-solr/) zawaleniem, ale okazało się 2 problemy z tym: 1.1. To nie jest część wydania i jest dostępne jako łatka, więc nie jesteśmy pewni, czy możemy użyć tego w produkcji. 1.2. Nie otrzymujemy sumy z powrotem, ale indywidualne liczby i musimy ją podsumować po stronie klienta.

  2. Używanie komponentu Statystyki wraz z wyszukiwaniem w postaci faset (http://wiki.apache.org/solr/StatsComponent). To spełnia nasze wymagania, ale nie jest wystarczająco szybkie dla bardzo dużych zestawów danych.

Chciałem tylko wiedzieć, czy ktokolwiek wie o jakimkolwiek innym sposobie osiągnięcia tego. Doceniam każdą pomoc.

Dzięki,

Terance.

+0

Jak duży jest zestaw danych? Czy odłamujesz indeks? –

+0

Myślę, że powinieneś spróbować porównać tę drugą metodę. Aspekty dość szybko zaczynają się w Solr 1.4. –

Odpowiedz

5

Dlaczego zamiast używać StatsComponent? - Dostępne od Solr 1.4 up.

$ 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>