Solr - как «сгруппировать» и «ограничить»? - PullRequest
7 голосов
/ 29 ноября 2010

Скажем, я проиндексировал следующее из своей базы данных:

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

Далее, скажем, пользователь ищет "привет", который должен вернуть записи 1, 2 и 3. Есть ли способ сделать Solr"сгруппировать по" полю Code и применить ограничение (скажем, 10 записей)?Я немного ищу SQL-аналог GROUP BY и LIMIT.

Кроме того, когда он выполняет эту «группировку по», я хочу, чтобы он выбрал наиболее релевантный документ и использовал поле Description этого документа какчасть возврата.

Конечно, я мог бы просто сделать так, чтобы Solr возвратил все в мое приложение, и я могу манипулировать результатами для выполнения GROUP BY и LIMIT.Я бы предпочел не делать этого, если это возможно.

Ответы [ 3 ]

12 голосов
/ 29 ноября 2010

Взгляните на свертывание поля , доступное в Solr 4.0. Сортировка групп по релевантности: group.sort=score desc.

0 голосов
/ 01 августа 2017

добавьте следующее поле к вашему запросу

  • 'группы': 'правда',
  • 'group.field': 'источник',
  • 'group.main': 'правда',
  • 'group.limit': 10
0 голосов
/ 13 декабря 2016

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

Примечание:

Ответ: начало -> ответ начните свой идентификатор. строки -> как вы видите количество строк.

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"}]
          }}]}}}
...