Приложение My Grails использует подключаемый модуль с возможностью поиска, который основан на Compass и Lucene для обеспечения функциональности поиска. У меня есть два класса с возможностью поиска, например, «Автор» и «Книга». Я сопоставил эти классы с индексом поиска, чтобы можно было искать только определенные поля.
Чтобы выполнить поиск по обоим классам, я просто вызываю
def results = searchableService.search(query)
. Одной из приятных особенностей одновременного поиска по обоим классам является то, что объект results
включает метаданные о количестве включенных результатов, number доступных результатов, сведений о разбивке на страницы и т. д.
Недавно я добавил логический флаг разрешено
в класс Book, и я никогда не хочу, чтобы неутвержденные книги появлялись в результатах поиска. Один из вариантов - заменить приведенный выше вызов на:
def bookResults = Book.search(query + " approved:1")
def authorResults = Author.search(query)
Однако теперь мне нужно выяснить, как объединить метаданные для обоих результатов, что, вероятно, будет сложно (особенно разбиение на страницы).
Есть ли способ выполнять поиск по книге и автору с помощью одного запроса, но возвращать только одобренные книги?