1

我正在使用 Hibernate Search 并在一个表上为域对象应用 Lucene 索引。我现在想从该表中选择域对象,并根据与未索引的其他表的连接应用过滤。

例如,我有 Auctionlots 表,我已经建立了索引。我有报价表。报价参考了拍卖品。

我想在 AuctionLots 表中进行完整的测试搜索并返回没有引号的匹配实体。在普通 SQL 中,这将通过 JOIN 来实现。

但是在使用 HibernateSearch 的情况下,我必须进行完整的测试搜索才能获得域对象,但我不知道如何使用 JOIN 执行过滤。

有没有人知道如何做到这一点?

4

2 回答 2

2

我不建议在为您的搜索创建索引时进行过滤。主要是因为据我所知 Hibernate Search 不支持它,也因为它没有任何意义。在我看来,您应该做的是索引您要搜索的对象,包括与“子”对象的关系。我假设您的 ActionLot 对象与您的 Quotes 对象具有一对多的关系。使用@IndexEmbedded注释,您可以将您的报价标记为也应该被索引的对象。当您搜索不带引号的 ActionLots 时,您可以在搜索期间使用搜索查询中的限制或对搜索应用全局过滤器来过滤它。这可以使用Hibernate Search 提供的过滤器选项来完成。

于 2009-12-02T12:01:02.793 回答
1

使用 @IndexEmbedded 或 ClassBridge 绝对是正确的方法。更改数据也不应该引起问题。这就是自动索引的用途。您不必在每次报价更改时重新索引所有数据。依靠自动索引将确保只有添加/更新的数据被重新索引。请注意 - 如果您希望在相关报价更改时更新 ActionLot 实例的索引,则需要建立双向关系并使用 @ConstainedIn

——哈代

于 2009-12-03T11:02:09.340 回答