java 在Sping Boot 应用程序中使用Opensearch的问题

8xiog9wr  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(416)

在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方法存在此问题。

9rnv2umw

9rnv2umw1#

升级到2.6.0对我来说很有效。阅读响应时,xcontentparser中似乎缺少***_type***。
DocWriteResponse类需要***_type*为非null,但使用1.1.0**会导致此属性为null,并在内部导致NPE。

相关问题