私はバージョン5.0.0.FinalでHibernate Searchを使用しています。 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);
}
}
}
私はインデックスにDBに存在しないフィールドを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
は、どうやらそれは私が(私の場合はMyEntity)オブジェクトフィールドにluceneQueryに与えるフィールドをマップしようとします。
データベースに存在しないカスタムフィールドのインデックスを照会する方法はありますか?
ありがとうございました。
あなたがHibernate Search 5.5.3にアップグレードすることができると仮定すると、FieldBridgeで作成しているフィールドを 'org.hibernate.search.bridge .MetadataProvidingFieldBridge'。それはDSLの統合を改善するはずです。 https://hibernate.atlassian.net/browse/HSEARCH-2021も参照してください。 – Sanne