Как проиндексировать поле как тип подсказки? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу использовать предложенную функцию эластичного поиска для автозаполнения.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html он идеально подходит для моих требований, но я не могу найти способ создать индекс для этого поля.Для типов поискового индекса существует тип FieldType enum, но он не содержит тип suggest, и я не вижу способа его расширить.в документации об этом ничего нет.Можно ли даже индексировать какое-то упругое специфическое поле с помощью hibernate-поиска?

1 Ответ

0 голосов
/ 26 февраля 2019

Чтобы уточнить мой комментарий: нет, это невозможно в 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, который все еще находится в разработке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...