Rod*_*Rod 7 indexing client parsing elasticsearch
使用java创建索引时我处理问题RestHighLevelClient在Elasticsearch和我CreateIndexResponse对象在结果无效.
我实际上能够创建索引,我可以在稍后查询它,但是当我创建索引时,我得到了这个异常.这是我的代码:
`CreateIndexRequest request = new CreateIndexRequest("myindex");
CreateIndexResponse createIndexResponse = client.indices().create(request);`
Run Code Online (Sandbox Code Playgroud)
Elasticsearch返回成功的消息:
`HTTP 200 Success
{
"acknowledged": true,
"shards_acknowledged": true
}`
Run Code Online (Sandbox Code Playgroud)
我实际上可以稍后通过GET调用来检索索引,但是当RestHighLevelClient尝试解析响应时,使用以下内部调用:
//Type of the response converter: CheckedFunction<Req, Request, IOException> requestConverter
responseConverter.apply(response);
Run Code Online (Sandbox Code Playgroud)
发生以下异常:
java.io.IOException: Unable to parse response body for
Response{requestLine=PUT /myindex?master_timeout=30s&timeout=30s HTTP/1.1,
host=http://localhost:9200, response=HTTP/1.1 200 OK}
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:507)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:474)
at org.elasticsearch.client.IndicesClient.create(IndicesClient.java:77)
at hello.client.HelloClient.createSynch(HelloClient.java:84)
at hello.main.Main.main(Main.java:25)
Caused by: java.lang.IllegalArgumentException: Required [index]
Run Code Online (Sandbox Code Playgroud)
所以基本上这就是说下面的响应无法解析,但对我来说它看起来很容易解析:
Response{requestLine=PUT /myindex?master_timeout=30s&timeout=30s HTTP/1.1,
host=http://localhost:9200, response=HTTP/1.1 200 OK}
Run Code Online (Sandbox Code Playgroud)
为什么它告诉我索引丢失了?是不是我错误地使用了Java客户端?这是版本:
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.1</version>
</dependency>
</dependencies>`
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
小智 11
您需要更新版本依赖项或添加兼容性标头(https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/),就我而言,甚至是最新版本的 Spring-data- Elastic Search 不支持 Elastic Search 8+ 版本。必须像这样配置我的客户端:
@Configuration
@EnableElasticsearchRepositories(basePackages = "*")
public class ElasticsearchClientConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Value("${elasticsearch.protocol}")
private String protocol;
@Value("${elasticsearch.username}")
private String userName;
@Value("${elasticsearch.password}")
private String password;
@Bean(destroyMethod = "close")
public RestHighLevelClient restClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
RestClientBuilder builder = RestClient.builder(new HttpHost(host, port, protocol))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
.setDefaultHeaders(compatibilityHeaders());
return new RestHighLevelClient(builder);
}
private Header[] compatibilityHeaders() {
return new Header[]{new BasicHeader(HttpHeaders.ACCEPT, "application/vnd.elasticsearch+json;compatible-with=7"), new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/vnd.elasticsearch+json;compatible-with=7")};
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |