ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

n. Elasticsearch JAVA API操作

2021-07-01 17:03:05  阅读:152  来源: 互联网

标签:API JAVA Spring Client Elasticsearch spring elasticsearch ES


引言

Elasticsearch所支持的客户端连接方式有两种

  1. Transport 连接
    底层使用socket连接,用官方提供的TransPort客户端,网络IO框架使用的是netty
  2. Http连接(Rest Client)
    采用Http请求的方式,访问Elasticsearch.
    注意:ES的发展规划中在7.0版本开始将废弃 TransportClient,8.0版本中将完全移除 TransportClient,取而代之的是High Level REST Client。

Rest Client

在Elasticsearch官方提供了两种基于Http连接的Rest Client

  1. Java Low Level REST Client
    Elasticsearch 的官方低级客户端。它允许通过 http 与 Elasticsearch 集群通信。将请求编组和响应取消编组给用户。它与所有 Elasticsearch 版本兼容。
  2. Java High Level REST Client
    Elasticsearch 的官方高级客户端。基于低级客户端,它公开 API 特定方法并处理请求编组和响应解组。

spring-data-elasticsearch

本文教程在Spring Boot框架中使用Rest Client,而Spring Boot已经帮我们集成好了用于ES操作的spring-data-elasticsearch
在spring-data-elasticsearch中我们可以发现一个核心的操作类ElasticsearchRestTemplate,而它是基于Java High Level REST Client的二次封装

Spring Boot中配置

在Spring Boot中用于操作ES的Start的Maven pom配置如下,它的version版本受Spring Boot版本控制,所以我们一般不需要指定其版本

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

application.yml配置文件

##如果为elasticsearch配置了安全账号和密码,需要指定其username和password,urls是配置集群内部的主机地址
spring:
  elasticsearch:
    rest:
      uris: http://192.168.31.100:9200
      connection-timeout: 10000

到此为止,Spring Boot集成elasticsearch操作,就已经完成了,是不是有点So easy的感觉啦?

编写实体映射

这一点操作跟JPA是一模一样的方式,通过在实体类上的注解,而自动创建其mapping

对于实体类里的每一个字段,我们可以为其指定@Field注解,并设置其相关值,而建立对应的mapping映射关,如果没有指定它在ES中映射类型,则会自动为其生成类型。

映射(map)关系也建立好了,现在还需要为每个实体创建一个Repository,而这些操作都是spring为我们提供的,为我们生成最基础的CRUD操作,跟Mybatis-plus的操作是一模一样

我们只需要创建一个接口,通过该接口继承ElasticsearchRepository这个泛型接口,在泛型中指定对应的实体类,是不是有点像是Mybatis-plus中的BaseMapper?
至此,实际上我们一行操作ES的代码都没有编写,就已经建立好了实体与ES中数据的映射关系和在ES中操作实体的CRUD基础操作。

在其它地方需要使用的时候,直接注入这个Repository接口就行,Spring会为我们自动生成代理类。

标签:API,JAVA,Spring,Client,Elasticsearch,spring,elasticsearch,ES
来源: https://www.cnblogs.com/yanchuanbin/p/14959577.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有