2010-11-29 7 views
6

Dire que j'indexé les éléments suivants de ma base de données:Solr - comment "grouper par" et "limiter"?

====================================== 
| 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    | 
... 

De plus, dire que les recherches des utilisateurs pour « bonjour », qui devrait retourner les dossiers 1, 2 et 3. Y at-il un moyen de faire un groupe Solr » par "le champ Code et appliquer une limite (disons, 10 enregistrements)? Je suis à la recherche d'une contrepartie SQL de GROUP BY et LIMIT.

Aussi, quand il fait ce "groupe par", je veux qu'il choisisse le document le plus pertinent et utilise le champ Description de ce document comme partie de la déclaration.

Bien sûr, je pourrais simplement demander à Solr de tout renvoyer à mon application et de manipuler les résultats pour faire le GROUP BY et LIMIT. Je préfère ne pas le faire si possible.

Répondre

12

Jetez un oeil à field collapsing, disponible en Solr 4.0. Groupes de tri sur la pertinence: group.sort=score desc.

+6

Cette fonction est également disponible dans Solr v3.3 + – markdsievers

+0

@Karl Johansso n comment cela peut-il être fait en utilisant django haystack? comme 'searchQuerySet(). models (Product) .group ('field:" title "')' –

+0

Ceci est également expliqué dans la référence de Solr: https://cwiki.apache.org/confluence/display/solr/Collapse+and + Agrandir + Résultats – 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

Note:

Réponse: début -> réponse commencer votre identifiant. lignes -> comment allez-vous wat nombre de lignes.

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

ajouter le champ suivant à votre requête

  • 'groupe': 'true',
  • 'group.field': 'source',
  • 'group.main': 'true',
  • 'group.limit': 10,