Как сделать группировку в результатах поиска Lucene? - PullRequest
5 голосов
/ 05 декабря 2008

Как сгруппировать результаты поиска, возвращаемые Lucene, по полям (аналогично SQL Server)?

Ответы [ 4 ]

2 голосов
/ 22 сентября 2011

Lucene 3.4 теперь поддерживает фасетный поиск. При индексации вы указываете что-то дополнительное, а во время поиска - по запросу и по группам.

для следующих 3 документов, которые вы проиндексировали с этими группами

doc1: monday, 1pm,  3min    
doc2: monday, 1pm,  4min    
doc3: monday, 2pm,  3min

вы можете искать только первый параметр: понедельник и получить значение: 3, или вы можете углубиться и найти понедельник / 13:00 и получить значение: 2 или установите глубину поиска 3 и получите

monday :3
monday/1pm :2
monday/1pm/3min :1
monday/1pm/4min :1
monday/2pm :1
monday/2pm/3min :1

вот исходный образец :

Но больше всего читать граненый поиск

1 голос
/ 06 сентября 2011

В Lucene есть несколько дополнительных библиотек, одна из которых вам нужна: Группировка

Вы не можете группировать по значениям запроса функции или по произвольному запросу (как это делает Solr), но вы можете сделать это по однозначному полю.

Нечто подобное (граненый поиск) будет реализовано в Lucene 4.0

1 голос
/ 05 декабря 2008

https://issues.apache.org/jira/browse/LUCENE-1421

кажется, что вы не можете. возможно, есть обходной путь: здесь есть нить, которая описывает, как это сделал кто-то еще: здесь

0 голосов
/ 05 декабря 2008

Непонятно, хотите ли вы действительно похожее на SQL поведение «GROUP BY» или просто «ORDER BY». В Lucene нет ничего похожего на функции агрегации, поэтому «GROUP BY» должен быть реализован в вашем приложении поверх Lucene.

Однако сортировка по полям довольно проста. Убедитесь, что нужное поле проиндексировано, и создайте объект org.apache.lucene.search.Sort для передачи в качестве критерия поиска; большинство методов поиска имеют перегрузку, которая принимает экземпляр Sort.

Если бы вы внедрили свою собственную логику «GROUP BY», наличие правильных полей с результатами «ORDERED BY» является первым полезным шагом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...