【问题标题】:Explore / browse Lucene index by Hibernate search通过 Hibernate 搜索探索/浏览 Lucene 索引
【发布时间】:2021-07-06 11:24:58
【问题描述】:

有没有办法浏览/探索由 Hibernate Search 创建的 Lucene 索引?我知道 Luke 嵌入在 Lucene 包中,但是这么糟糕的软件无法打开我的索引。这是我所拥有的:

  • Spring Boot 2.4.4
  • Hibernate Core 5.4.30.Final
  • 休眠搜索 5.11.8.Final
  • Lucene 8.8.1
  • Java 1.8
  • Windows 10

任何打开我的索引的尝试最终都会出现异常,例如“未知错误”或这样的废话。另外我不知道我有什么目录实现,因为我在没有配置目录实现的情况下使用 Hibernate Search。 谢谢!

[2021-04-11T02:26:17,500] 错误 (OpenIndexDialogFactory.java:355) - 打开索引或目录时出错 java.lang.UnsatisfiedLinkError: java.library.path 中没有 WindowsDirectory: [C:\Program Files\Java\jdk-11.0.10\bin, C:\WINDOWS\Sun\Java\bin, C:\WINDOWS\system32, C:\WINDOWS, C:\Program Files\Common Files\Oracle\Java\javapath, C:\Program Files (x86)\Common Files\Oracle\Java\javapath... [2021-04-11T02:26:31,751] INFO (IndexUtils.java:121) - DirectoryReader 成功打开。目录路径=F:\storage\TheVegCat.development\lucene\com.thevegcat.app.entities.article.Article [2021-04-11T02:26:35,757] INFO (IndexUtils.java:161) - 目录已成功关闭。 [2021-04-11T02:26:35,760] WARN (IndexUtils.java:145) - 无效的目录实现类:org.apache.lucene.store.NativeUnixDirectory java.lang.NoSuchMethodException: org.apache.lucene.store.NativeUnixDirectory.(java.nio.file.Path) 在 java.lang.Class.getConstructor0(Class.java:3349) ~[?:?] 在 java.lang.Class.getConstructor(Class.java:2151) ~[?:?] [2021-04-11T02:26:36,779] 错误 (OpenIndexDialogFactory.java:355) - 打开索引或目录时出错 java.lang.IllegalArgumentException:无效的目录实现类:org.apache.lucene.store.NativeUnixDirectory

编辑:按照@andrewjames 的建议,使用较旧的 Luke 5.5.0 尝试了所有选项和目录实现,但没有运气。

C:\...\luke-5.5.0>java -jar .\target\luke-with-deps.jar 警告:发生了非法反射访问操作 警告:org.apache.lucene.store.MMapDirectory$1 (file:/C:/.../luke-5.5.0/target/luke-with-deps.jar) 对方法 java.nio.DirectByteBuffer 的非法反射访问。清洁器() 警告:请考虑将此报告给 org.apache.lucene.store.MMapDirectory$1 的维护者 警告:使用 --illegal-access=warn 启用对进一步非法反射访问操作的警告 警告:所有非法访问操作将在未来版本中被拒绝 错误:java.lang.Exception:此目录中没有有效的 Lucene 索引。

附:该索引只有 500 KB 大小,我愿意与任何可以尝试的人分享。

【问题讨论】:

  • Hibernate Search 倾向于使用旧版本的 Lucene。根据this,您的版本使用的是 Lucene 5.5,而不是 Lucene 8。如果您使用的是与 Lucene 8 捆绑在一起的 Luke 版本,是的,我预计它无法打开使用 Lucene 5.5 构建的索引。您能否确认您实际使用的是 Lucene 8.8.1(如问题中所列)?
  • 如果这是您的问题,您可以找到旧版本的 Luke here。 (现在,较新的版本与 Lucene 捆绑在一起 - 但以前没有。)
  • @andrewjames 谢谢!但我不希望失败,而是支持更多 tnan 正是它使用的唯一版本的一个版本。我的意思是同时支持当前的旧版本与当前版本有多难?没关系,我会尝试使用旧版本,我希望在同一个 luke 构建中至少支持小版本
  • @andrewjames 刚试了一下,当然,什么也没发生。尝试了所有目录的所有选项,我唯一得到的是一条错误消息。错误消息的内容将在主帖中。
  • 您使用的是哪个版本的 Lucene?它可能是 5.5.x,其中 x 不是 0。在我的情况下,我得到 5.5.5 作为与 Hibernate 5.11.8 捆绑的版本。另请参阅:How to read lucene 5.5.5 index?。这建议您尝试将 Luke 6.6.0 用于 Lucene 5.5.5 索引。

标签: java spring spring-boot hibernate elasticsearch


【解决方案1】:

好吧,神奇的答案是在每次尝试打开目录失败后重新启动 Luke。一旦遇到异常,请关闭 Luke 并重新启动它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多