Как можно сгруппировать результаты Lucene?

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

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

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


person Roman    schedule 09.10.2010    source источник


Ответы (3)


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

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

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

person bajafresh4life    schedule 10.10.2010

Я считаю, что вы просите Свертывание полей, которое является функцией Solr (и я считаю, Elasticsearch тоже).

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

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

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

person Yuval F    schedule 10.10.2010

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

person Yossi Vainshtein    schedule 30.09.2015