2010-11-29 23 views
6

decir te indexado lo siguiente de mi base de datos:Solr: cómo "agrupar por" y "limitar"?

====================================== 
| Id | Code | Description   | 
====================================== 
| 1 | A1 | Hello world   | 
| 2 | A1 | Hello world 123  | 
| 3 | A1 | World hello hi  | 
| 4 | B1 | Quick fox jumped  | 
| 5 | B1 | Lazy dog    | 
... 

Además, decir que las búsquedas de los usuarios para "Hola", que debe devolver los registros 1, 2 y 3. ¿Hay una manera de hacer Solr "grupo de "el campo Code y aplica un límite (por ejemplo, 10 registros)? Estoy buscando una contraparte SQL de GROUP BY y LIMIT.

Además, cuando hace este "grupo por", quiero que elija el documento más relevante y use el campo Description de ese documento como parte de la declaración.

Por supuesto, podría hacer que Solr devuelva todo a mi aplicación y pueda manipular los resultados para hacer GROUP BY y LIMIT. Prefiero no hacer esto si es posible.

Respuesta

12

Eche un vistazo a field collapsing, disponible en Solr 4.0. Ordenando grupos según la relevancia: group.sort=score desc.

+6

Esta característica también está disponible en Solr v3.3 + – markdsievers

+0

@Karl Johansso n ¿cómo se puede hacer eso usando el pajar django? como 'searchQuerySet(). models (Product) .group ('field:" title "')' –

+0

Esto también se explica en la referencia de Solr: https://cwiki.apache.org/confluence/display/solr/Collapse+and + Expandir + Resultados – cheffe

0

http://XXX.XXX.XXX.XXX:8080/solr/autocomplete/select?q=displayterm:new&wt=json&indent=true&q.op=and&fl=displayterm&group=true&group.field=displayterm&rows=3&start=0

Nota:

Respuesta: inicio -> respuesta de iniciar su identificación. filas -> ¿cómo ves el número de filas?

Exp 
1 step 
    &start=0&rows=3 
2 step 
    &start=3&rows=3 
3 step 
    &start=6&rows=3 
etc. 


{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":1, 
    "params":{ 
     "fl":"displayterm", 
     "indent":"true", 
     "start":"0", 
     "q":"displayterm:new", 
     "q.op":"and", 
     "group.field":"displayterm", 
     "group":"true", 
     "wt":"json", 
     "rows":"3"}}, 
    "grouped":{ 
    "displayterm":{ 
     "matches":231, 
     "groups":[{ 
      "groupValue":null, 
      "doclist":{"numFound":220,"start":0,"docs":[ 
       { 
       "displayterm":"Professional News"}] 
      }}, 
     { 
      "groupValue":"general", 
      "doclist":{"numFound":1,"start":0,"docs":[ 
       { 
       "displayterm":"General News"}] 
      }}, 
     { 
      "groupValue":"delhi", 
      "doclist":{"numFound":2,"start":0,"docs":[ 
       { 
       "displayterm":"New Delhi"}] 
      }}]}}} 
0

añadir el siguiente campo para su consulta

  • 'grupo': 'verdadero',
  • 'group.field': 'fuente',
  • 'group.main': 'verdadero',
  • 'group.limit': 10,