0

在我们的域模型中,我们非常积极地使用聚合,即我们不通过 jpa 关系连接所有类,而是使用我们可以查询相关对象的服务。因此,假设我们有两个示例类,Person 和 Workplace,它们通过引用而不是直接的对象关系相关联。

public class Person {
  int id;
  String name;
}

public class Workplace {
  int id;
  String name;
  List<int> personId;
}

现在我们想建立一个 Hibernate Search 索引,它应该索引来自 Person 和 Workplace 的字段。这是否可能通过 Hibernate Search 实现,还是我们必须手动处理我们自己的 Lucene 索引器并负责 Hibernate Search 自己对索引执行的所有维护?

还有其他我们应该考虑的解决方案吗?

4

1 回答 1

3

使用 Hibernate Search,您可以轻松地创建一个包含两者的索引,或者您可以为每个实体有两个索引,但查询它们,因为它是单个索引。

@Indexed @Entity
public class Person {
   int id;
   @Field
   String name;
}

@Indexed @Entity
public class Workplace {
   int id;
   @Field
   String name;
   List<int> personId;
}

然后,您可以使用此索引来查找匹配的 Persons 和/或 Workplace 实例。

org.apache.lucene.search.Query q = ...[a standard Lucene query]
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( q, Person.class );
List<Person> list = fullTextQuery.list();

或针对两种类型:

FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( q, Person.class, Workspace.class );
List list = fullTextQuery.list();

或者只是所有索引类型:

FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( q );
List list = fullTextQuery.list();
于 2013-08-13T19:59:00.427 回答