首页 > 解决方案 > ElasticSearch v5.6.16 throws XContentParseException failed to parse field [version] error while using Java High Level REST Client

问题描述

我在 JEST 中使用 elasticsearch v5.6.16

    <dependency>
        <groupId>io.searchbox</groupId>
        <artifactId>jest</artifactId>
        <version>6.3.1</version>
    </dependency>

我能够使用以下配置查询弹性搜索。

static JestClient client = null;
public JestClientConfig() {
}
public static JestClient  getInstance(){
    if(client == null){
        JestClientFactory factory = new JestClientFactory();
        factory.setHttpClientConfig(
                new HttpClientConfig.Builder(Configuration.ES_URL)
                .defaultCredentials(Configuration.ES_USER,Configuration.ES_PASS)
                .multiThreaded(true)
                .defaultMaxTotalConnectionPerRoute(2)
                .maxTotalConnection(20)
                .build());
        client= factory.getObject();
    }
    return client;
}

现在我已经升级到 elasticsearch v7.14.1,但根据这篇文章 https://stackoverflow.com/a/57766430/10311582,JEST 与最新版本不兼容(如果我错了,请纠正我)。所以我正在为 Java 高级 REST 客户端使用以下依赖项

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.14.1</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.14.1</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>7.14.1</version>
</dependency>

并使用以下代码块,

static RestHighLevelClient client = null;
public ESClientConfig() {
}
public static RestHighLevelClient  getInstance(){
if(client == null){
    RestClientBuilder clientBuilder = RestClient
    .builder(new HttpHost(Configuration.ES_HOST, Integer.valueOf(Configuration.ES_PORT),"http"))
    .setRequestConfigCallback(builder -> builder.setConnectTimeout(1000).setSocketTimeout(1000));

    HttpAsyncClientBuilder asyncClientBuilder = HttpAsyncClientBuilder.create();
    clientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder -> asyncClientBuilder);
    client = new RestHighLevelClient(clientBuilder);
    }
return client;
}

我的少数服务仍在使用旧的 v5.6.16 实例,所以我想为两个 elasticsearch 版本创建与 Java High Level REST Client 的连接,直到我们完全升级到新的 elasticsearch。从 Java High Level REST Client 向 v5.6.16 查询时,出现以下错误。

org.elasticsearch.common.xcontent.XContentParseException: [11:3] [org.elasticsearch.client.core.MainResponse] failed to parse field [version]
at org.elasticsearch.common.xcontent.ObjectParser.parseValue(ObjectParser.java:519)
at org.elasticsearch.common.xcontent.ObjectParser.parseSub(ObjectParser.java:529)
at org.elasticsearch.common.xcontent.ObjectParser.parse(ObjectParser.java:312)
at org.elasticsearch.common.xcontent.ConstructingObjectParser.parse(ConstructingObjectParser.java:159)
at org.elasticsearch.common.xcontent.ConstructingObjectParser.apply(ConstructingObjectParser.java:151)
at org.elasticsearch.client.core.MainResponse.fromXContent(MainResponse.java:70)
at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:2011)
at org.elasticsearch.client.RestHighLevelClient.getVersionValidation(RestHighLevelClient.java:2161)
at org.elasticsearch.client.RestHighLevelClient.access$100(RestHighLevelClient.java:253)
at org.elasticsearch.client.RestHighLevelClient$5.onSuccess(RestHighLevelClient.java:2123)
at org.elasticsearch.client.RestClient$FailureTrackingResponseListener.onSuccess(RestClient.java:636)
at org.elasticsearch.client.RestClient$1.completed(RestClient.java:376)
at org.elasticsearch.client.RestClient$1.completed(RestClient.java:370)
at org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:122)
at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:181)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:448)
at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:338)
at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114)
at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Required [minimum_wire_compatibility_version, minimum_index_compatibility_version]
at org.elasticsearch.common.xcontent.ConstructingObjectParser$Target.finish(ConstructingObjectParser.java:492)
at org.elasticsearch.common.xcontent.ConstructingObjectParser$Target.access$000(ConstructingObjectParser.java:396)
at org.elasticsearch.common.xcontent.ConstructingObjectParser.parse(ConstructingObjectParser.java:159)
at org.elasticsearch.common.xcontent.AbstractObjectParser.lambda$declareObject$1(AbstractObjectParser.java:158)
at org.elasticsearch.common.xcontent.ObjectParser.lambda$declareField$9(ObjectParser.java:374)
at org.elasticsearch.common.xcontent.ObjectParser.parseValue(ObjectParser.java:517)

任何人都可以帮我解决这个问题吗?

标签: elasticsearchelasticsearch-5elasticsearch-jest

解决方案


推荐阅读