Обычно вам не следует извлекать все совпадения в одном запросе, потому что могут быть миллионы совпадений, и загрузка их всех может вызвать проблемы с памятью.
Если вы действительно хотите сделать это в любом случае, вы можете получить все результаты, просто не установив ограничения для вашего запроса:
Hibernate Search 5:
Session session = /* ... */;
FullTextSession fullTextSession = Search.getFullTextSession( session );
Query luceneQuery = /* ... */;
FullTextQuery ftQuery = fullTextSession.createFullTextQuery( luceneQuery, MyEntity.class );
List<MyEntity> hits = ftQuery.list();
Hibernate Search 6:
Session session = /* ... */;
List<MyEntity> = Search.session( session ).search( MyEntity.class )
.where( f -> /* ... */ )
.fetchAllHits();
Но во многих случаях это не сработает или будет плохо работать, потому что попадания занимают слишком много памяти.
В идеале вы должны использовать прокрутку вместо .
Вот пример с Hibernate Search 5:
FullTextQuery ftQuery = /*...*/;
ScrollableResults scroll = ftQuery.scroll();
scroll.beforeFirst();
int i = 0;
while ( scroll.next() ) {
++i;
MyEntity entity = scroll.get()[0];
// ... do things with the entity ...
// Flush/clear the session periodically to free memory
if ( i % 100 == 0 ) {
// Only necessary if you changed entities
session.flush();
// Only necessary if you changed indexed entities
fullTextSession.flushToIndexes();
session.clear();
}
}
Для Hibernate Search 6 API будет другим. В настоящее время он реализуется ( HSEARCH-3323 ) и будет доступен в следующей бета-версии.