如何获取与hibernate搜索结果列表相关的对象?
How to get the object related to hibernate search result list?
我需要搜索在 elasticsearch 上索引的几个文档。搜索有效,但我需要知道 returns 搜索的对象类型。
public 列表搜索(字符串项){
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
QueryBuilder authorQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Author.class).get();
QueryBuilder postQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Post.class).get();
QueryBuilder commentQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Comment.class).get();
Query authorLQ = authorQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(AUTHOR_FIELDS).matching(terms)
.createQuery();
Query postLQ = postQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(POST_FIELDS).matching(terms)
.createQuery();
Query commentLQ = commentQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(COMMENT_FIELDS).matching(terms)
.createQuery();
Query luceneQuery = authorQB.bool()
.should(authorLQ)
.should(postLQ)
.should(commentLQ)
.createQuery();
javax.persistence.Query jpaQuery = fullTextEntityManager.
createFullTextQuery(luceneQuery, Author.class, Post.class, Comment.class);
List<Object> result; // need to know object type
try {
result = jpaQuery.getResultList();
} catch (NoResultException nre) {
throw new NoResultException("The search for " + terms + " did not get any results");
}
return result;
}
这给了我所有对象的列表,但我需要确切地知道它是什么类型(作者,Post 或评论)。可以做到,谢谢。
您可以只使用 instanceof
...但是如果您真的希望 Hibernate Search return 那样,您可以使用投影:
FullTextQuery jpaQuery = fullTextEntityManager.
createFullTextQuery(luceneQuery, Author.class, Post.class, Comment.class);
jpaQuery.setProjection( ProjectionConstants.OBJECT_CLASS, ProjectionConstants.THIS );
List<Object[]> results = jpaQuery.list();
for ( Object[] result : results ) {
Class<?> resultClass = result[0];
Object resultObject = result[1];
// ... do stuff ...
}
我需要搜索在 elasticsearch 上索引的几个文档。搜索有效,但我需要知道 returns 搜索的对象类型。
public 列表搜索(字符串项){
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
QueryBuilder authorQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Author.class).get();
QueryBuilder postQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Post.class).get();
QueryBuilder commentQB = fullTextEntityManager.getSearchFactory().buildQueryBuilder()
.forEntity(Comment.class).get();
Query authorLQ = authorQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(AUTHOR_FIELDS).matching(terms)
.createQuery();
Query postLQ = postQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(POST_FIELDS).matching(terms)
.createQuery();
Query commentLQ = commentQB
.keyword().fuzzy().withEditDistanceUpTo(1).withPrefixLength(1)
.onFields(COMMENT_FIELDS).matching(terms)
.createQuery();
Query luceneQuery = authorQB.bool()
.should(authorLQ)
.should(postLQ)
.should(commentLQ)
.createQuery();
javax.persistence.Query jpaQuery = fullTextEntityManager.
createFullTextQuery(luceneQuery, Author.class, Post.class, Comment.class);
List<Object> result; // need to know object type
try {
result = jpaQuery.getResultList();
} catch (NoResultException nre) {
throw new NoResultException("The search for " + terms + " did not get any results");
}
return result;
}
这给了我所有对象的列表,但我需要确切地知道它是什么类型(作者,Post 或评论)。可以做到,谢谢。
您可以只使用 instanceof
...但是如果您真的希望 Hibernate Search return 那样,您可以使用投影:
FullTextQuery jpaQuery = fullTextEntityManager.
createFullTextQuery(luceneQuery, Author.class, Post.class, Comment.class);
jpaQuery.setProjection( ProjectionConstants.OBJECT_CLASS, ProjectionConstants.THIS );
List<Object[]> results = jpaQuery.list();
for ( Object[] result : results ) {
Class<?> resultClass = result[0];
Object resultObject = result[1];
// ... do stuff ...
}