弹性搜索 Lucene 版本错误



>我有一个非常简单的 ES 客户端,它将向本地 ES 服务器(ES 的 1.4.1 版本)发送查询并获取结果并显示给用户。现在,我将这段代码带到了另一个项目 X 中,并尝试将其与 X 一起使用,因为我需要来自 X 的一些 API。现在,当我在 X 中运行时运行相同的代码时,我会收到此错误并且不知道如何解决。你能帮我这个吗?线程"main"中的异常 java.lang.NoSuchFieldError: LUCENE_3_6

at org.elasticsearch.Version.<clinit>(Version.java:45) 
at org.elasticsearch.node.internal.InternalNode.<init>(InternalNode.java:136) 
at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) 
at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166) 
at org.bmi.elasticsearch.ranking.TestClass2.main(TestClass2.java:54)

您似乎正在尝试将Elasticsearch和Lucene作为单独的库在项目中使用。

Elastissearch 1.4.1 基于 Lucene 4.10.2。您可以在此处查看发布博客页面以获取更多详细信息。

要解决您的问题,您需要将 Lucene 库版本更新到 4.10 并使用Version.LUCENE_CURRENT而不是LUCENE_3_6。

你可以在这里找到Lucene 4.10 Core API文档。

我希望这会有所帮助。如果您有疑问,请随时发表评论。

同样的错误也可能发生在另一种情况下 - 如果有人在与以前的版本相同的目录中解压缩新的 ElasticSearch 版本。然后它最终在"ElasticSearch/lib"目录中得到两个版本的jar。启动时出现错误。

在这种情况下,解决方法是进行干净的 ElasticSearch 安装,没有残留物。

从 ES 7.0 开始 您可以在https://github.com/elastic/elasticsearch/blob/f2987b417f4346846d50e12b782fb12e153aa4ef/server/src/main/java/org/elasticsearch/Version.java

最新更新