当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Data ES 3.2.0中使用高级Rest客户端。M1

葛书
2023-03-14

Spring Data ES 3.2.0.M1仍然使用旧的TransportClient而不是HighLevelRestClient

Spring Data ES 3.2.0.M1支持高级REST客户端,请参阅添加对Java高级REST客户端的支持。我添加了Spring Data ES 3.2.0。M1到SB2应用程序:

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.2.0.M1</version>
        </dependency>

但是,仍然使用了TransportClient。有两种迹象表明:启动时的例外情况:

o.e.transport.netty4.Netty4Transport     : exception caught on transport layer [NettyTcpChannel{localAddress=/127.0.0.1:61171, remoteAddress=localhost/127.0.0.1:8085}], closing connection

io.netty.handler.codec.DecoderException: java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:472) ~[netty-codec-4.1.33.Final.jar:4.1.33.Final]

调用ElasticsearchTemplate时出现异常stacktrace

    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:349)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:247)
    at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:60)
    at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:382)
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:395)
    at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:384)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:46)
    at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.getSearchResponse(ElasticsearchTemplate.java:947)

是否有任何配置参数告诉Spring Data ES切换到新的高级Rest客户端?医生们对此只字不提。

P.S.Spring数据ES 3.2。0.M1有6.4。3 ES客户端版本:

Caused by: java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)
    at org.elasticsearch.transport.TcpTransport.validateMessageHeader(TcpTransport.java:1327) ~[elasticsearch-6.4.3.jar:6.4.3]
    at org.elasticsearch.transport.netty4.Netty4SizeHeaderFrameDecoder.decode(Netty4SizeHeaderFrameDecoder.java:36) ~[transport-netty4-client-6.4.3.jar:6.4.3]
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502) ~[netty-codec-4.1.33.Final.jar:4.1.33.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:441) ~[netty-codec-4.1.33.Final.jar:4.1.33.Final]
    ... 20 common frames omitted

后端运行6.4。2版本:

bash-4.4$ curl http://127.0.0.1:8085
{
  "name" : "NA17WWR",
  "cluster_name" : "494164851665",
  "cluster_uuid" : "7t3LoK7PRp-ur6FyxSmHwQ",
  "version" : {
    "number" : "6.4.2",
    "build_flavor" : "oss",
    "build_type" : "zip",
    "build_hash" : "04711c2",
    "build_date" : "2018-10-16T09:16:35.059415Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

共有1个答案

訾凯歌
2023-03-14

正如您所指的问题中提到的,高级REST客户端在ElasticsearchRestTemplate(请参见PR 216)中提供,而不是在ElasticsearchTemplate中提供,出于向后兼容性的原因,他们将保留到ES 7。

您可以使用以下配置创建一个:

<bean name="elasticsearchTemplate"
      class="org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate">
    <constructor-arg name="client" ref="restClient"/>
</bean>

<elasticsearch:rest-client id="restClient"/>
 类似资料:
  • 我正在尝试从ElasticSearch 2过渡到5或6。我想我想直接跳到6.1.1并使用RestHighLevelClient,因为它比低级rest客户端更接近我正在使用的现有传输客户端。 但是,我遇到了一个问题作为集成测试的一部分,我正在创建索引并插入特定数据,因此我知道我的查询是正确的。我似乎无法在High Level客户端中做到这一点。特别是,我希望能够调用: 但是,client.indic

  • 我得到以下异常,而试图使用Elasticsearch高Rest客户端。 我使用的是Spring Boot 2.0.4和Elasticsearch 6.4版本。。用例只是用一些数据创建一个索引,然后检索相同的数据。。 我刚刚遵循了elasticsearch文档中的依赖项,并正确地进行了设置。 我对Gradle的依赖是 为了简单起见,给出了代码的简短版本。。 有人能帮忙吗?

  • 我正在尝试将数据插入bonsai上托管的ElasticSearch(版本7.4.2)。io云。当我尝试创建IndexRequest时 我的pom。xml具有以下依赖关系: 我甚至尝试将以下依赖项添加到我的pom.xml 有人能在7.4.2版本中帮我解决这个问题吗?

  • 我在从传输客户端迁移到Rest高级客户端时遇到问题。下面的代码不适用于RestHighLevelClient,我想使用它来获取类类型的聚合页面的响应。 我们也欢迎任何用其他方法实现同样目标的建议。

  • 我想获取我的ElasticSearch集群的元数据,它的版本是5.6.x。我正在使用高级rest客户端。 我已经检查了rest客户端支持的所有api,但是没有找到获取元数据的方法。 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/Java-rest-high-support-apis.html 如何使用ES5.6

  • 这是我的Elasticsearch sql查询。我使用Kibana执行了这个查询,并得到了有效的输出。 明白吗?format=json{“query”:“从eps_stbl_日志中选择Count(appId),其中cast(timestamp AS DATE)=TODAY()和status='COMPLETED'” 这需要在restHighLevelClient java API中编写。你能帮助编