>我有一个非常简单的 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