【问题标题】:Hibernate Search RAMProvider - not sure how it worksHibernate Search RAMProvider - 不确定它是如何工作的
【发布时间】:2016-02-11 07:26:46
【问题描述】:

我正在使用 spring boot 并且为了更容易设置(没有用户权限操作),我决定使用 RAM 提供程序而不是 FS。谁能证实我的想法。

  • 每当我重新启动时,我都会丢失索引。
  • 任何时候通过 Hibernate 的东西都会被自动索引,因为在适当的实体上有 @Indexed 注释。
  • 如果重新启动,我需要重建索引,因为它丢失了
 try {
            FullTextEntityManager fullTextEntityManager =
                    Search.getFullTextEntityManager(entityManager);
            fullTextEntityManager.createIndexer().startAndWait();
        } catch (InterruptedException e) {
            System.out.println(
                    "An error occurred trying to build the search index: " +
                            e.toString());
        }
  • 如果我将使用 FSDirectoryProvider,索引将自动从 FS 重新加载,并且不再需要上面的代码。除非 ORM 实体发生变化。我想我需要以某种方式手动强制重新索引。

是否有一些可以依赖的 DBDirectory 实现?在这种情况下,索引文件是加载到 RAM 中还是每次对索引的更新都单独写入 DB?

【问题讨论】:

    标签: spring lucene spring-boot hibernate-search


    【解决方案1】:

    你所有的假设几乎都是正确的。

    内存索引在两种情况下会丢失:

    • JVM 关闭
    • 索引在应用程序仍在运行时重新打开

    只有在以下情况下,您才需要重新索引您的实体:

    • 您更改了在索引或搜索期间分析或标记实体的方式
    • 您在索引中添加或删除了实体属性
    • 您更改了影响索引的实体之间的关系

    在撰写本文时,还没有基于数据库的目录。过去我尝试适应CompassJdbcDirectory。不幸的是,我从来没有时间比工作的概念证明更进一步。

    自 2011 年以来,项目跟踪器中有一个打开的 issues。似乎在不久的将来,在 Hibernate Search 中将不会正式支持数据库驱动的目录。

    请记住,内存中的索引仅适用于 small data

    警告:此类不适用于大型索引。 超过几百兆的一切都会浪费资源(GC 周期),因为它使用 1024 字节的内部缓冲区大小, 产生数百万字节[1024] 数组。该类针对 小内存驻留索引。它的并发性也很差 多线程环境。

    【讨论】:

      【解决方案2】:

      您可以使用 Infinispan 目录作为替代方案,将内容保存在内存中,但在持久存储上拥有副本。

      Infinispan 项目同时提供了一个

      • Apache Lucene Directory 实现
      • Hibernate Search DirectoryProvider

      A pointer to the source code

      Infinispan 旨在积极地将数据缓存在内存中,但有几个选项可以通过在其配置中启用 CacheStore 来将此类数据卸载到永久存储。

      在众多 CacheStore 实现中,您可能对以下内容感兴趣:

      还有更多选择,例如连接到云存储、流行的 NoSQL 数据库等。Infinispan 还支持跨节点的实时复制,因此您在 Hibernate Search 中的索引存储选项几乎是无限的。

      【讨论】:

        猜你喜欢
        • 2013-01-11
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        • 2010-10-15
        • 1970-01-01
        • 2017-10-25
        相关资源
        最近更新 更多