【发布时间】: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