【问题标题】:Hibernate Search question休眠搜索问题
【发布时间】:2009-12-02 11:41:00
【问题描述】:

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

例如,我有 Auctionlots 表,我已编入索引。我有报价表。报价参考了拍卖品。

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

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

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

【问题讨论】:

    标签: hibernate-search full-text-search


    【解决方案1】:

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

    【讨论】:

    • 谢谢!但是你不觉得,索引频繁变化的数据,比如 Quotes 有点不对吗?
    • 我不知道它多久改变一次,但我认为这不会是一个大问题。 Lucene(由 Hibernate Search 使用)有一个相当不错的索引器,它针对速度进行了优化,并在必要时推迟索引。为了让你的索引更小,你可以使用ClassBridge 将 Quotes 的字段合并到一个 Lucene 字段中。
    【解决方案2】:

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

    --哈迪

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2011-11-17
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多