我正在使用Hibernate Search并在一个表上为域对象应用Lucene索引。我现在想要从这个表中选择域对象,并根据与未编制索引的其他表的连接应用过滤。
例如,我有Auction Lots表,我已编入索引。我有行情表。报价引用了Auction Lots。
我想在AuctionLots表中进行完整的测试搜索,并返回没有引号的匹配实体。在普通的SQL中,这将通过JOIN实现。
但是在使用HibernateSearch的情况下,我必须进行完整的测试搜索以获取域对象,但我不知道如何使用JOIN执行过滤。
有没有人知道如何做到这一点?
答案 0 :(得分:2)
我不建议在为搜索创建索引时进行过滤。主要是因为据我所知,Hibernate Search不支持它,但也因为没有意义。在我看来,你应该做的是索引你想要搜索的对象,包括与'子'对象的关系。
我假设你的ActionLot对象与你的Quotes对象有一对多的关系。使用@IndexEmbedded
注释,您可以将引号标记为应编入索引的对象。
当您搜索没有引号的ActionLots时,您可以在搜索期间使用搜索查询中的任一限制或通过对搜索应用全局过滤器来对其进行过滤。这可以使用Hibernate Search提供的filter options来完成。
答案 1 :(得分:1)
使用@IndexEmbedded或ClassBridge绝对是正确的方法。更改数据也不会导致问题。这就是自动索引的用途。每次引用更改时,您不必重新索引所有数据。依赖自动索引将确保仅重新索引添加/更新的数据。 作为注释 - 如果您希望在相关引用更改时更新ActionLot实例的索引,则需要具有双向关系并使用@ConstainedIn
- 哈迪