Я использую Hibernate Search в версии 5.0.0.Final. У меня есть 1 поле, проиндексированное в 1 таблице. Я использую FieldBridge проиндексировать это поле:HibernateSearch запрос на виртуальные поля, индексированные с помощью FieldBridge
public class CustomBridge implements FieldBridge {
@Override
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
MyFieldType file = (ProductOrderJsonEntity) value;
if (file.getA() != null && file.getB() != null) {
luceneOptions.addFieldToDocument(name + ".ABconcat", file.getA() + file.getB(), document);
}
}
}
Я использую FieldBridge индексировать поля, которое не существует в БД, поэтому, когда я пытаюсь сделать запрос, как это, он выходит из строя:
EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
em.getTransaction().begin();
QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(MyEntity.class).get();
org.apache.lucene.search.Query luceneQuery = qb.keyword().onFields("productOrder.internalReference", "techId").matching(keyword).createQuery();
javax.persistence.Query jpaQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, MyEntity.class);
... со следующей ошибкой:
org.hibernate.search.exception.SearchException: Unable to find field field.ABconcat in com.something.myapp.MyEntity
по-видимому, пытается отобразить поля, которые я даю в luceneQuery к полям объектов (MyEntity в моем случае).
Есть ли способ запросить индекс в настраиваемых полях, которые не существуют в базе данных?
Спасибо.
Ваш ответ верен, в дополнение к этому, если вы можете перейти на Hibernate Search 5.5.3 - вы можете объявить поля, которые вы создаете в FieldBridge, с помощью 'org.hibernate.search.bridge .MetadataProvidingFieldBridge'. Это должно улучшить интеграцию DSL. См. Также https://hibernate.atlassian.net/browse/HSEARCH 2021 – Sanne