Elasticsearch rest-high-level-client 基本操作

本篇次要解说一下 rest-high-level-client 去操作 Elasticsearch , 尽管这个客户端在后续版本中会缓缓淘汰,然而目前大部分公司中应用Elasticsearch 版本都是6.x 所以这个客户端还是有肯定的理解

前置筹备

  • 筹备一个SpringBoot环境 2.2.11 版本
  • 筹备一个Elasticsearch 环境 我这里是8.x版本
  • 引入依赖 elasticsearch-rest-high-level-client 7.4.2

1.配置依赖

留神: 我应用的是 springboot 2.2.11 版本 , 它外部的 elasticsearch 和 elasticsearch-rest-client 都是 6.8.13 须要留神

   <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>       <!-- 引入 elasticsearch 7.4.2  -->        <dependency>            <groupId>org.elasticsearch</groupId>            <artifactId>elasticsearch</artifactId>            <version>7.4.2</version>            <exclusions>                <exclusion>                    <artifactId>log4j-api</artifactId>                    <groupId>org.apache.logging.log4j</groupId>                </exclusion>            </exclusions>        </dependency>      <!-- 排除 elasticsearch-rest-client , 也可不排除 为了把maven抵触解决   -->        <dependency>            <groupId>org.elasticsearch.client</groupId>            <artifactId>elasticsearch-rest-high-level-client</artifactId>            <version>7.4.2</version>            <exclusions>                <exclusion>                    <groupId>org.elasticsearch.client</groupId>                    <artifactId>elasticsearch-rest-client</artifactId>                </exclusion>                <exclusion>                    <artifactId>elasticsearch</artifactId>                    <groupId>org.elasticsearch</groupId>                </exclusion>            </exclusions>        </dependency>        <!-- 不引入会导致可能 应用 springboot的 elasticsearch-rest-client 6.8.13 -->        <dependency>            <groupId>org.elasticsearch.client</groupId>            <artifactId>elasticsearch-rest-client</artifactId>            <version>7.4.2</version>        </dependency>        <!-- elasticsearch 依赖 2.x 的 log4j -->        <dependency>            <groupId>org.apache.logging.log4j</groupId>            <artifactId>log4j-core</artifactId>            <version>2.8.2</version>            <!--  排除掉 log4j-api 因为springbootstarter 中引入了loging模块 -->            <exclusions>                <exclusion>                    <artifactId>log4j-api</artifactId>                    <groupId>org.apache.logging.log4j</groupId>                </exclusion>            </exclusions>        </dependency>        <!-- junit 单元测试 -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>

2.构建 RestHighLevelClient

highlevelclient 是 高级客户端 须要通过它去操作 Elasticsearch , 它底层也是要依赖 rest-client 低级客户端

@Slf4jpublic class TestEsClient {    private RestHighLevelClient client = null;    private ObjectMapper objectMapper = new ObjectMapper();            //构建 RestHighLevelClient    @Before    public void prepare() {        // 创立Client连贯对象        String[] ips = {"172.16.225.111:9200"};        HttpHost[] httpHosts = new HttpHost[ips.length];        for (int i = 0; i < ips.length; i++) {            httpHosts[i] = HttpHost.create(ips[i]);        }        RestClientBuilder builder = RestClient.builder(httpHosts);        client = new RestHighLevelClient(builder);    }}

3.创立索引 client.indices().create

创立索引 须要应用 CreateIndexRequest 对象 , 操作 索引基本上是 client.indices().xxx

构建 CreateIndexRequest 对象

@Testpublic void test1() {    CreateIndexRequest request = new CreateIndexRequest("blog1");    try {        CreateIndexResponse createIndexResponse =                client.indices().create(request, RequestOptions.DEFAULT);        boolean acknowledged = createIndexResponse.isAcknowledged();        log.info("[create index blog :{}]", acknowledged);    } catch (IOException e) {        e.printStackTrace();    }}

4.删除索引 client.indices().delete

构建 DeleteIndexRequest 对象

@Testpublic void testDeleteIndex(){    DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("blog1");    try {        AcknowledgedResponse response = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);        log.info("[delete index response: {}", response.isAcknowledged());    } catch (IOException e) {        e.printStackTrace();    }}

4.查问索引 client.indices().get

构建 GetIndexRequest 对象

@Testpublic void testSearchIndex() {    GetIndexRequest request = new GetIndexRequest("blog1");    try {        GetIndexResponse getIndexResponse =                client.indices().get(request, RequestOptions.DEFAULT);        Map<String, List<AliasMetaData>> aliases = getIndexResponse.getAliases();        Map<String, MappingMetaData> mappings = getIndexResponse.getMappings();        Map<String, Settings> settings = getIndexResponse.getSettings();        log.info("[aliases: {}]", aliases);        log.info("[mappings: {}]", mappings);        log.info("[settings: {}", settings);    } catch (IOException e) {        e.printStackTrace();    }}

能够依据 response 获取 aliases , mappings , settings 等等 和 Kibana 中返回的一样

5.插入文档 client.index

插入文档 须要应用 IndexRequest 对象 , 留神 不是 InsertRequest , 不晓得为什么不这样定义 感觉会更加好了解

request.source(blogInfoJsonStr, XContentType.JSON);

@Testpublic void insertDoc() {    IndexRequest request = new IndexRequest();    request.index("blog1").id("1");    BlogInfo blogInfo =            new BlogInfo()                    .setBlogName("Elasticsearch 入门第一章")                    .setBlogType("Elasticsearch")                    .setBlogDesc("本篇次要介绍了Elasticsearch 的根本client操作");    try {         //提供java 对象的 json str        String blogInfoJsonStr = objectMapper.writeValueAsString(blogInfo);                request.source(blogInfoJsonStr, XContentType.JSON);        // 这里会抛错 起因是 我的 Elasticsearch 版本8.x 而 应用的 restHighLevel 曾经解析不了,因为新的es曾经不举荐应用        // restHighLevel,而应用 Elasticsearch Java API Client        IndexResponse index = client.index(request, RequestOptions.DEFAULT);        log.info("[Result insert doc :{} ]", index);    } catch (IOException e) {    }}

6.查问文档 client.get

留神 getResponse.getSourceAsString() 返回文档数据

@Testpublic void testSelectDoc() {    GetRequest getRequest = new GetRequest();    getRequest.index("blog1").id("1");    try {        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);        BlogInfo blogInfo =                objectMapper.readValue(getResponse.getSourceAsString(), BlogInfo.class);        log.info("[get doc :{}] ", blogInfo);    } catch (IOException e) {        e.printStackTrace();    }}

7.删除文档 client.delete

留神 删除文档 的 response 也解析不了 Elasticsearch 8.x 版本

@Testpublic void testDeleteDoc() {    DeleteRequest deleteRequest = new DeleteRequest();    deleteRequest.index("blog1").id("1");    try {        // 这里也会抛错 和下面的一样        DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);        log.info("[delete response:{} ]", deleteResponse);    } catch (IOException e) {    }}

总结

本篇次要介绍了 java 操作Elasticsearch 的客户端 rest-high-level-client 的根本应用 , 如果你是应用springboot 须要留神jar 抵触问题, 后续操作 Elasticsearch 客户端 逐步变成 Elasticsearch Java API Client , 不过目前大部分还是应用 rest-high-level-client

欢送大家拜访 集体博客 Johnny小屋
欢送关注集体公众号