Ich habe eine Anwendung basierend auf Spring Data JPA und Hibernate Search erstellt. In meiner indizierten Entität habe ich eine ClassBridge erstellt, die je nach Entität ein zusätzliches Feld hinzufügt, aber ich weiß nicht, wie ich dieses zusätzliche Feld bekommen soll.Fetch @ClassbBridge Feldwerte
hier ist meine Einheit:
public class ImageUrlClassBridge implements FieldBridge,ParameterizedBridge {
private ProductsService productsService;
@Override
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
ProductModel product=(ProductModel) value;
productsService=ApplicationContextProvider.getApplicationContext().getBean(ProductsService.class);
ImageModel image=productsService.findImageByProduct(product.getId());
if(!ObjectUtils.isEmpty(image)){
Logger.getAnonymousLogger().info("\nIMAGE FOUND : "+image.getId());
Field field = new Field(name,image.getUrl(), luceneOptions.getStore(),
luceneOptions.getIndex(), luceneOptions.getTermVector());
field.setBoost(luceneOptions.getBoost());
document.add(field);
}
}
...
}
und hier ist die Suchmethode nach Produktmodell:
@Indexed
@ClassBridge(name="Image_url",
impl = ImageUrlClassBridge.class)
@Entity
@Table(name="PRODUCTS")
public class ProductModel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Field([email protected](definition="ngram"))
private String name;
...
}
hier mein classBridge ist
@SuppressWarnings("unchecked")
public List<ProductModel> search(String keyword) {
FullTextEntityManager ftem = org.hibernate.search.jpa.Search.getFullTextEntityManager(entityManager);
QueryBuilder queryBuilder = ftem.getSearchFactory().buildQueryBuilder().forEntity(ProductModel.class).get();
Query query =queryBuilder.keyword().onField("name").matching(keyword).createQuery();
FullTextQuery jpaQuery =ftem.createFullTextQuery(query, ProductModel.class);
List<ProductModel> results = jpaQuery.getResultList();
return results;
}
Ich möchte nicht mit diesem Feld suchen, aber ich möchte seinen Wert abrufen –
Die Antwort aktualisiert. –
warum wirft es mir diese Ausnahme: 'Projizieren eines nicht gespeicherten Feldes: Image_url'. ... beachten Sie, dass ich die Indexierung gemacht habe und es erfolgreich durchgeführt wurde –