Как можно сгруппировать результаты Lucene? - PullRequest
0 голосов
/ 09 октября 2010

Мое приложение индексирует дискуссионные темы. Каждая запись в обсуждении индексируется как отдельный документ Lucene с полем common_id, который можно использовать для группировки поисковых запросов в одно обсуждение.

В настоящее время, когда поиск выполняется, если в потоке 3 записи, возвращаются 3 отдельных совпадения. Хотя это и правильно, с точки зрения пользователей одна и та же запись появляется в поиске несколько раз.

Есть ли способ указать lucene сгруппировать результаты поиска по полю common_id перед их возвратом?

Ответы [ 3 ]

1 голос
/ 10 октября 2010

Я полагаю, что вы запрашиваете Свертывание поля , что является особенностью Solr (и я считаю, что Elasticsearch).

Если вы хотите бросить свой собственный, один из возможных способов сделать это:

  1. Добавьте поле «идентификатор серии» к каждому документу, который является членом серии. Вы должны будете убедиться, что это увеличивается для каждого новая серия.
  2. Сделайте начальный запрос к Lucene и получите список совпадений.
  3. Для каждого попадания проверьте, есть ли у него идентификатор серии; Если это так, сделайте еще один запрос по идентификатору серии, чтобы получить все участники сериала.

Альтернативой является сохранение идентификаторов всех членов серии в поле внутри документа каждого участника.

0 голосов
/ 30 сентября 2015

Начиная с версии 3.2, lucene поддерживает группирование результатов поиска по полям. http://lucene.apache.org/core/4_1_0/grouping/org/apache/lucene/search/grouping/package-summary.html

0 голосов
/ 10 октября 2010

Нет ничего встроенного в Lucene, который сворачивает результаты, основанные на поле.Вам нужно будет реализовать это самостоятельно.

Однако они недавно встроили эту функцию в Solr.

См. http://www.lucidimagination.com/blog/2010/09/16/2446/

...