Чтобы уточнить мой комментарий: нет, это невозможно в Hibernate Search 5, но ...
Вы можете реализовать автозаполнение самостоятельно.
Определить анализатор с помощью edge-ngramфайл маркера для индексации и другой для запросов, как описано здесь .
Затем используйте эти анализаторы в поле, к которому вы хотите добавить автозаполнение:
@Field(name = "myField_autocomplete", analyzer = @Analyzer(definition = "edgeNGram"))
@Field(name = "dummy", analyzer = @Analyzer(definition = "edgeNGram_query")
String myField;
Примечаниеполе «фиктивный» является обязательным из-за некоторых ограничений в Hibernate Search 5, чтобы обеспечить доступность анализатора «edgeNGram_query» в вашем индексе.См. здесь для получения подробной информации об этом хаке.
Затем выполните переиндексацию ваших данных.
Затем вы сделаете запрос следующим образом:
String userInput = ...;
QueryBuilder builder = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Contact.class)
.overridesForField("myField", "edgeNGram_query")
.get();
Query luceneQuery = builder.keyword().onField("myField").matching(userInput).createQuery();
FullTextQuery query = fullTextEntityManager.createQuery( luceneQuery, MyEntity.class );
List<MyEntity> results = query.getResultList();
Обратите внимание, что этиограничения (невозможность использовать тип suggest
, необходимость разбираться в определении анализатора только для запросов) исчезнет в Hibernate Search 6, который все еще находится в разработке.