在Spring Boot应用程序中使用Opensearch的问题
我正在尝试将OpenSearch与我的SpringBoot应用程序一起使用。因为没有专门的Spring Boot Starter Open Search Dependency用于Open Search。我正在使用Spring Boot Starter数据ElasticSearch依赖项和maven依赖项用于opensearch rest高级客户端和open search。
稍后在config类中,我将使用Rest高级客户端的示例配置我的Open Search(如Port和hostName)。
现在,要使用Java在OpenSearch中执行CRUD操作,我们可以通过使我们的存储库接口扩展ElasticSearchRepository来使用内置方法,如save,findById,findAll,deleteById等。
但我的问题是,当使用save(T t)方法将数据添加到数据库时,如Cricketer cricketer = www.example.com(Cricketer),数据正在保存在数据库中,但我收到一个异常消息“java. lang. RuntimeException:repo.savetimeout = 1m HTTP/1.1,host = http://localhost:9200,response = HTTP/1.1 201 Created}" Unable to parse response body for Response{requestLine=PUT /game-index1/_doc/2009? timeout=1m HTTP/1.1, host=http://localhost:9200, response=HTTP/1.1 201 Created}"
这个问题只与save方法有关,因为像findById和findAll这样的Get方法也可以正常工作。只有save方法存在此问题。
另外,在启动spring boot应用程序时,虽然应用程序正在启动,但它指出Elasticsearch Client和Cluster之间存在版本不匹配:7.12.1 - 2.7.0,但这里的问题是集群是openserach的,没有7.x版本。请帮助我纠正这个问题。
我在pom.xml中的依赖是`
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.opensearch.client</groupId>
<artifactId>opensearch-rest-high-level-client</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.opensearch</groupId>
<artifactId>opensearch</artifactId>
<version>1.1.0</version>
</dependency>`
->我的OpenSearch配置类是:”
@Configuration
@EnableElasticsearchRepositories(basePackageClasses = CricketerRepo.class)
@ComponentScan(basePackageClasses = OpenSearchConfig.class)
public class OpenSearchConfig {
@Bean
public RestHighLevelClient client() {
return new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http")));
}
}`
注意:这里我禁用了OpenSearch的登录部分用于发布目的。
我的文档类是:
@Document(indexName = "game-index1")
public class Cricketer {
@Id
private String cID;
private String cName;
private String cRole;
private String cCountry;
}
我的仓库类是:
@Repository
public interface CricketerRepo extends ElasticsearchRepository<Cricketer, String> {
}
我在服务类中的Add方法是:
@Autowired
CricketerRepo repository;
public Cricketer addCricketer(Cricketer cricketer) {
return repository.save(cricketer); // Exception occuring at this line
}
这里的日期,我想保存在DB(Opensearch正在获得成功保存,但作为保存方法应该返回的东西,板球在这种情况下.我收到一个异常,说明无法解析响应)
我得到的异常是:java.lang.RuntimeException:无法解析响应{requestLine = PUT/game-index1/_doc/2009?timeout = 1m HTTP/1.1,host = http://localhost:9200,response = HTTP/1.1 201 Created}
我在启动spring boot应用程序时收到的Version mismatch消息是:Elasticsearch客户端和集群之间的版本不匹配:7.12.1 - 2.7.0
注意:即使它说有一个版本不匹配,spring boot应用程序也能正常启动,而且像findById和findAll这样的Get方法也能正常工作。只有save方法存在此问题。
1条答案
按热度按时间9rnv2umw1#
升级到2.6.0对我来说很有效。阅读响应时,xcontentparser中似乎缺少***_type***。
DocWriteResponse类需要***_type*为非null,但使用1.1.0**会导致此属性为null,并在内部导致NPE。