java - Lucene - 验证索引的完整性

标签 java hibernate validation indexing lucene

我们使用 Lucene 5.5.5 以允许对我们的数据库内容进行全文搜索。我们在数据库迁移后构建索引,并使用近实时索引管理器来保持索引是最新的。但是,有时可能会发生服务器在索引管理器可以提交它仍然保存在内存中的索引条目之前被杀死的情况。

为了避免总是在服务器启动时重建索引,因为它很慢,我想知道是否可以检查索引是否完成。我知道有CheckIndex - 实用程序,但据我了解,它只能检查索引是否损坏,但不能检查是否完整。

另一种选择可能是不完全重建但完成现有索引的索引器。

解决此问题的最佳方法是什么?我的目标是在启动时尽可能少地浪费时间,并拥有一个完整的索引。

我猜一个明显的解决方案是不再使用近实时索引管理器,但现在,我不想考虑这个选项。

最佳答案

确实,近实时 indexmanager 将修改缓冲在内存中,据我所知,目前无法验证索引刷新的完整性。

所以解决方案可能是:

  • 切换到基于目录的索引管理器。 (缺点:与近实时索引管理器相比性能更差)
  • 使用 healthcheck将检查您的应用程序状态并更新标志的服务 isServerForciblyClosed在数据库中,如果是 true然后在下次启动时重建索引。如果计划关闭,应关闭此服务。
  • 创建自己的CustomIndexManager实现扩展内置类或完全从头实现 Indexmanager接口(interface)
  • 关于java - Lucene - 验证索引的完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58689947/

    相关文章:

    java - 实现不同存储策略的模式

    java - 在 hibernate 命名查询中调用自定义函数

    java - JSP在 session 中存储密码

    Hibernate 更新我的实体

    c# - 未调用自定义验证属性指定的方法

    java - 水平 JScrollPane 的绘制问题

    java - 为什么这个 Java 编码是 UTF-8 --> Latin1 错误?

    java - AnnotationException : @OneToOne or @ManyToOne on MySchema$Parent. propertyX 引用未知实体:MySchema$Child

    javascript - 输入允许数字和单个逗号

    java - 使用 XSD、目录解析器和用于 XSLT 的 JAXP DOM 验证 XML