Solr - how to "group by" and "limit"?

32,712

Solution 1

Have a look at field collapsing, available in Solr 4.0. Sorting groups on relevance: group.sort=score desc.

Solution 2

add the following field to your query

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

Solution 3

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:

Response: start -> response start your id. rows -> how do you wat number of rows .

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"}]
          }}]}}}
Share:
32,712
StackOverflowNewbie
Author by

StackOverflowNewbie

Updated on March 26, 2020

Comments

  • StackOverflowNewbie
    StackOverflowNewbie about 4 years

    Say I indexed the following from my database:

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

    Further, say the user searches for "hello", which should return records 1, 2, and 3. Is there a way to make Solr "group by" the Code field and apply a limit (say, 10 records)? I'm somewhat looking for a SQL counterpart of GROUP BY and LIMIT.

    Also, when it does this "group by", I want it to choose the most relevant document and use that document's Description field as part of the return.

    Of course, I could just have Solr return everything to my application and I can manipulate the results to do the GROUP BY and LIMIT. I'd rather not do this if possible.

  • markdsievers
    markdsievers over 12 years
    This feature is also available in Solr v3.3+
  • Admin
    Admin almost 11 years
    @Karl Johansson how can that be done using django haystack? like searchQuerySet().models(Product).group('field:"title"')
  • cheffe
    cheffe over 8 years
    This is also explained in Solr's reference: cwiki.apache.org/confluence/display/solr/…