#hibernate-search #hibernate-search-6
#переход в режим гибернации -поиск #переход в режим гибернации-поиск-6
Вопрос:
Я пытаюсь перенести свое приложение с поиска в режиме гибернации с 5 на 6. В версии 6 я заметил, что добавлена проверка поля, и вы не можете выполнять поиск по полям, которых нет в индексе. К сожалению, у меня есть бизнес-логика, которая полагалась на это. Есть ли способ получить доступ к классу ElasticsearchIndexModel (насколько я вижу, в этом классе находится состояние полей) и проверить, существует ли определенное поле? Или есть какой-нибудь способ сделать это вообще?
Ответ №1:
Существует API метамодели.
Что-то вроде этого должно работать:
<T> boolean isSearchable(SearchMapping mapping, Class<T> entityClass,
String fieldPath) {
SearchIndexedEntity<T> entity = mapping.indexedEntity( entityClass );
IndexDescriptor index = bookEntity.indexManager().descriptor();
Optional<IndexFieldDescriptor> fieldOptional = index.field(fieldPath)
if (!fieldOptional.isPresent()) {
return false;
}
IndexFieldDescriptor field = fieldOptional.get();
return field.isValueField() amp;amp; field.toValueField().type().searchable();
}
Вы можете получить доступ к SearchMapping
этому пути:
SearchMapping mapping = Search.mapping( entityManagerFactory );
Или:
SearchMapping mapping = Search.mapping( entityManager.getEntityManagerFactory() );
Или в Quarkus вы можете просто ввести его в свои компоненты:
public class MyBean {
@Inject
SearchMapping mapping;
...
}