【问题标题】:Elasticsearch 5.1 error "java.lang.NoSuchFieldError: LUCENE_5_4_1" when trying to create a TransportClient尝试创建 TransportClient 时 Elasticsearch 5.1 错误“java.lang.NoSuchFieldError: LUCENE_5_4_1”
【发布时间】:2017-05-04 18:58:21
【问题描述】:

我正在尝试为 Elasticsearch 5.1 编写客户端,并尝试使用 TransportClient 对象,如此处所述 (https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.1/transport-client.html)。

为了测试这个客户端,我有一个简单的 get 函数,它使用 ES 网站 (https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-get.html) 上记录的 Get API。

但是,我的代码甚至没有执行到我的 get 函数,而是在创建我在客户端类的构造函数中创建的 PreBuiltTransportClient 对象时引发错误。下面是代码的sn-p。错误是从第一行抛出的。

PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(Settings.EMPTY);
try{
    this.esClient = (TransportClient) preBuiltTransportClient.addTransportAddress(
            new InetSocketTransportAddress(InetAddress.getByName(esHost), esPort));
} catch (UnknownHostException ex) {
    LOGGER.error("Host cannot be reached: ", ex);
    preBuiltTransportClient.close();
    this.esClient.close();
}

这是我使用 get API 测试客户端的方式。搜索值来自 elasticsearch github 示例 (https://github.com/elastic/elasticsearch)。

//for testing purposes
public void testGet(String index, String type, String id) {
    GetResponse response = esClient.prepareGet(index, type, id).get();
    System.out.println("testGet response: " + response);
}

public static void main(String[] args) {
    ESClient = new ESClient("localhost", 9200);
    String index = "twitter"; 
    String type = "tweet";
    String id = "kimchy";
    client.testGet(index, type, id);
}

最后,下面是错误的完整堆栈跟踪:

Exception in thread "main" java.lang.NoSuchFieldError: LUCENE_5_4_1
at org.elasticsearch.Version.<clinit>(Version.java:57)
at org.elasticsearch.common.io.stream.StreamOutput.<init>(StreamOutput.java:74)
at org.elasticsearch.common.io.stream.BytesStreamOutput.<init>(BytesStreamOutput.java:60)
at org.elasticsearch.common.io.stream.BytesStreamOutput.<init>(BytesStreamOutput.java:57)
at org.elasticsearch.common.io.stream.BytesStreamOutput.<init>(BytesStreamOutput.java:47)
at org.elasticsearch.common.xcontent.XContentBuilder.builder(XContentBuilder.java:69)
at org.elasticsearch.common.settings.Setting.arrayToParsableString(Setting.java:726)
at org.elasticsearch.common.settings.Setting.lambda$listSetting$26(Setting.java:672)
at org.elasticsearch.common.settings.Setting$2.getRaw(Setting.java:676)
at org.elasticsearch.common.settings.Setting.lambda$listSetting$24(Setting.java:660)
at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:665)
at org.elasticsearch.common.settings.Setting.listSetting(Setting.java:660)
at org.elasticsearch.common.network.NetworkService.<clinit>(NetworkService.java:50)
at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:91)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:119)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:247)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:92)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:81)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:71)
at customclient.<init>(ESClient.java:43)
at customclient.main(ESClient.java:112)

我不确定这个错误是由什么引起的,或者我可能做错了什么,希望能得到一些帮助!谢谢!

【问题讨论】:

    标签: java elasticsearch etl


    【解决方案1】:

    根据我在下面发布的 ES 博客博客,您不应该拥有最新版本的 Lucene 吗?

    今天我们很高兴地宣布发布 Elasticsearch 5.1.1, 基于 Lucene 6.3.0。

    source

    【讨论】:

    • 如果 Elasticsearch 5.1.1 基于 Lucene 6.3.0,那它不应该已经有 Lucene 了吗?
    • 基于 Lucene 并不意味着它应该已经有了它吧?不过不确定!
    • 如果您特别包含旧版本的 Lucene(例如在您的 pom.xml 中)OP 的异常将被抛出。我自己偶然发现了这个问题,我通过删除旧版本 Lucene 的遗留包含来修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多