Поскольку вы уже используете Hibernate и Lucene, Hibernate Search является отличным выбором.
В первую очередь Hibernate Search предоставляет механизм обновления ваших индексов Lucene при изменении данных, а также возможность максимизировать то, что вы уже знаете о Hibernate, чтобы упростить поиск по индексам Lucene.
Вы сможете указать, какие конкретные поля в каждой сущности вы хотите проиндексировать, а также добавить несколько типов индексов по мере необходимости (например, основанные на полноте и полнотекстовые). Вы также сможете управлять индексированием графа для ассоциаций, чтобы вы могли выполнять довольно сложные запросы через Search / Lucene.
Я обнаружил, что для расширенного поиска текста лучше использовать Hibernate Search, но вернитесь к обычному Hibernate для более традиционного поиска и гидратации сложных графов объектов для отображения результатов.