【问题标题】:Hibernate search - delete Elasticsearch index configHibernate search - 删除 Elasticsearch 索引配置
【发布时间】:2018-07-23 19:57:07
【问题描述】:

我们正在使用海量索引器来创建索引本身和文档。 我们有自己的版本控制,想法是在有新版本时完全删除所有文档和索引配置,让海量索引器完成它的工作。

问题在于,与直接使用 Lucene 不同,当我们尝试清除所有索引时,它只会删除文档,不会删除索引配置,这会在尝试修改现有字段时发生冲突.

有没有办法通过 Hibernate Search 来做到这一点,还是我们需要直接在我们的集群上使用 DELETE 方法?

【问题讨论】:

    标签: java hibernate elasticsearch hibernate-search elasticsearch-5


    【解决方案1】:

    我假设您在从一个版本的应用程序迁移到下一个版本的迁移过程中运行这个海量索引作业。 如果是这样,在触发重新索引的一次性作业中,您可以使用以下设置启动 Hibernate:

    hibernate.search.default.elasticsearch.index_schema_management_strategy drop-and-create
    

    然后,在启动时,Hibernate Search 将完全删除索引及其映射,然后重新创建它。

    小心,只有在专用程序中执行批量索引时才可以这样做。您的应用程序可能不应该使用此设置启动,因为它会导致它在每次启动时删除索引(例如,如果您出于任何原因必须重新启动服务器)。

    来源:the official documentation

    附注:

    问题在于,与直接使用 Lucene 不同,当我们尝试清除所有索引时,它只会删除文档,不会删除索引配置,这会在尝试修改现有字段时发生冲突.

    这实际上与 Lucene 集成的行为相同:当您清除 Lucene 索引时,索引文件保持不变,只是所有内容都已删除。 主要区别在于 Elasticsearch 有一些索引元数据(映射),而“原始”Lucene 没有。

    但是,在您的情况下,当前的行为确实很烦人。我们将在未来尝试解决它,可能作为HSEARCH-2861 的一部分。

    【讨论】:

    • index_schema_management_strategy 设置的问题是有时我们只需要重新索引一个实体。此外,我们有多个节点在运行,并且其中一个被选为领导者来执行此类程序,动态更改设置将非常困难(如果不是不可能的话)。我现在将创建一个对 ES 集群的 REST 调用来执行此操作。感谢您提供翔实的答案!
    • @andrehil 你有没有找到解决这个问题的方法?我们遇到了同样的事情。似乎绕过了休眠搜索,然后在尝试使用 MassIndexer 重新索引时,使用 DELETE rest 调用访问 ES 集群会引入一些奇怪的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多