Мое решение не совсем то, что вы просили, а мое мнение о том, что SOLR делает лучше всего, а именно полнотекстовый поиск. Вместо того чтобы группировать результаты по «категориям», я бы предложил упорядочить результаты по значению релевантности, а также указать количество аспектов для значений категории. По моему опыту, пользователи ожидают, что «поиск» будет вести себя как Google, с лучшими совпадениями в верхней части. Отклонение от этой нормы в большинстве случаев смущает пользователя.
Если вы хотите в точности так, как вы просили (фактические результаты сгруппированы по категориям), вы можете использовать реляционную базу данных и выполнить group_by или написать пользовательский запрос функции с SOLR (я не могу посоветовать это как Я никогда этого не делал).
Дополнительная информация: индексировать данные в соответствующие поля, например, имя, население и т. д. Но также добавьте поле под названием «категория», которое будет иметь значение ГОРОДЫ, ГОСУДАРСТВА или СТРАНЫ. Затем выполните стандартный поиск SOLR, который будет возвращать результаты в порядке релевантности, то есть лучшие совпадения в верхней части. В качестве части запроса вы можете указать facet.field=category
, который будет возвращать счет для результатов поиска для каждой из указанных категорий (в разделе результатов «фасет»). В пользовательском интерфейсе вы можете создавать ссылки для каждого фасета категории, который выполняет первоначальный поиск, плюс &fq=category:CITIES
и т. Д., Ограничивая результаты только этой категорией. См. обзор фасетирования в вики SOLR для получения дополнительной информации.