Java 在Hibernate搜索中,是否可以在索引过程之前预先定义查询或条件?

Java 在Hibernate搜索中,是否可以在索引过程之前预先定义查询或条件?,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,我将MassIndexer与@索引拦截器一起使用,它工作正常,我能够过滤实体。但问题是我有成千上万的软删除记录,我不希望这些对象在索引过程中,因为它们不再重要 那么,在Hibernate搜索中,是否可以在索引过程之前对预定义的查询或条件进行索引?您不能使用预定义的HQL进行索引。相反,您可以截取索引过程并指示索引器是否应该索引、跳过或删除实体的索引 请参考《参考指南》中的主题 在您的情况下:当>95%的数据不需要编制索引时,我建议如下: 考虑通过运行查询并按中所述将项推送到索引来手动重新编制索引

我将MassIndexer与@索引拦截器一起使用,它工作正常,我能够过滤实体。但问题是我有成千上万的软删除记录,我不希望这些对象在索引过程中,因为它们不再重要


那么,在Hibernate搜索中,是否可以在索引过程之前对预定义的查询或条件进行索引?

您不能使用预定义的HQL进行索引。相反,您可以截取索引过程并指示索引器是否应该索引、跳过或删除实体的索引

请参考《参考指南》中的主题

在您的情况下:当>95%的数据不需要编制索引时,我建议如下:

  • 考虑通过运行查询并按中所述将项推送到索引来手动重新编制索引
  • 考虑拆分完整数据表和仅活动数据表。这有点重复数据,但在仅处理活动记录时,应该可以获得可观的性能提升

  • 不能使用预定义的HQL进行索引。相反,您可以截取索引过程并指示索引器是否应该索引、跳过或删除实体的索引

    请参考《参考指南》中的主题

    在您的情况下:当>95%的数据不需要编制索引时,我建议如下:

  • 考虑通过运行查询并按中所述将项推送到索引来手动重新编制索引
  • 考虑拆分完整数据表和仅活动数据表。这有点重复数据,但在仅处理活动记录时,应该可以获得可观的性能提升

  • 我已经提到我已经在使用拦截器。但这不是一个好的解决方案,因为您仍然在查询所有记录,并且当您有+1000000个对象时,您会注意到索引工作的速度有多慢。如果您的任务是重新索引数百万个记录,我不认为Hibernate Search是一个好的解决方案。但是你会经常索引所有这些吗?我认为这是hibernate搜索的真正用例,不是经常,而是每一个新版本,或者,当你想在开发环境中重新编制索引而不指定索引限制时,最痛苦的是。我还没有深入研究实现,但结果可能是Hibernate会话本身可能会减慢速度(取决于它在索引和Hibernate设置中的使用方式)。否则,如果您不希望有超过95%的软删除记录,那么这并没有多大区别(在我看来,算法复杂性保持不变),软删除和arch记录超过95%:)我已经提到我已经在使用拦截器。但这不是一个好的解决方案,因为你仍然在查询所有记录,当你有+1000000个obj时,你会注意到索引工作有多慢。如果你的任务是重新索引数百万个记录,我认为Hibernate搜索不是一个好的解决方案。但是你会经常索引所有这些吗?我认为这是hibernate搜索的真正用例,不是经常,而是每一个新版本,或者,当你想在开发环境中重新编制索引而不指定索引限制时,最痛苦的是。我还没有深入研究实现,但结果可能是Hibernate会话本身可能会减慢速度(取决于它在索引和Hibernate设置中的使用方式)。否则,如果您不希望有超过95%的软删除记录,这没有多大区别(在我看来,算法复杂性保持不变)。好吧,问题是,软删除和arch记录超过95%:)