elasticsearch - 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)
任何人都可以帮我解决这个问题吗?
解决方案
推荐阅读
- django - “以 10 为基数的 int() 的无效文字:'' 在 django 更新查询中使用动态字段时出现错误
- javascript - 如何运行不存在 package.json 文件的 JavaScript 项目,从而在运行时出错?
- prometheus - 使用 Prometheus 监控 Spark 3 应用程序
- react-native - can't play this file error using react-native-expo
- c# - C# 枚举到 postgres 枚举
- flutter - 如何减少颤动中小部件之间的空间
- css - Angular - 将样式添加到 shadow-root 内的类
- flutter - Flutter:如何在按下时动态更改/切换按钮的文本/名称?
- php - 带有自由文本的选择选项的 PHP 旧值
- c - 计算 MDA-8086 上 7 段 LED 的十六进制值