Hibernate搜索多个实体

时间:2018-06-06 16:32:29

标签: hibernate lucene hibernate-search

是否可以搜索多个实体以查找相同的关键字,使用特定过滤器过滤每种类型并将它们放在一个列表中?

例如,拥有实体,饲养员和动物,并在其数据中搜索条件" Boston Terrier"。之后,为物种过滤育种者和物种的动物,并返回包含动物和育种者的单个列表。

然后可以修剪此列表以在Web应用程序的前端对结果进行分页:

        // FullTextQuery ftq = .... definiing and filtering the query

        int numResults = ftq.getResultSize();
        ftq.setFirstResult((pageNum-1)*numPerPage);
        ftq.setMaxResults(numPerPage);

        List<Object> results = ftq.getResultList();

1 个答案:

答案 0 :(得分:1)

假设你不关心育种者和动物之间的关系,只想寻找动物或育种者:是的,你可以。

但有一些条件:

  • 您要应用“波士顿梗”术语过滤器的字段必须在Animal类和Breeder类中以完全相同的方式配置:同一分析器在特定。否则,您的搜索结果可能会不一致。这些字段不必存在于两个索引中:对“animalName”和“breederName”字段进行过滤应该可以正常工作。
  • 您要用于按位置过滤育种者的位置字段<{1}}类中不得存在。否则,动物也会按位置过滤。
  • 您希望用于根据Animal类中的物种过滤的物种来过滤物种。否则,育种者也将按物种过滤。

如果上述所有三项的答案都是“是的,我很好”,那么你可以做到以下几点:

  • Breeder创建QueryBuilder,说Animal
  • animalQueryBuilder创建另一个QueryBuilder,例如Breeder
  • 使用breederQueryBuilder作为物种过滤器。
  • 使用animalQueryBuilder作为位置过滤器
  • 对于术语过滤器
  • 使用一个构建器或另一个构建器(应该无关紧要)

然后,在创建查询时,将Animal类和Breeder类都传递给breederQueryBuilder方法。

查询应该返回动物和饲养员。

类似的东西:

createFullTextQuery