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

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

本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch , 虽然这个客户端在后续版本中会慢慢淘汰,但是目前大部分公司中使用Elasticsearch 版本都是6.x 所以这个客户端还是有一定的了解

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

前置准备

  • 准备一个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 需要注意


            org.springframework.boot
            spring-boot-starter-web

            org.projectlombok
            lombok
            true

            org.springframework.boot
            spring-boot-starter-test
            test

            org.elasticsearch
            elasticsearch
            7.4.2

                    log4j-api
                    org.apache.logging.log4j

            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            7.4.2

                    org.elasticsearch.client
                    elasticsearch-rest-client

                    elasticsearch
                    org.elasticsearch

            org.elasticsearch.client
            elasticsearch-rest-client
            7.4.2

            org.apache.logging.log4j
            log4j-core
            2.8.2

                    log4j-api
                    org.apache.logging.log4j

            junit
            junit
            4.12

2.构建 RestHighLevelClient

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

@Slf4j
public 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 对象 , &#x64CD;&#x4F5C; &#x7D22;&#x5F15;&#x57FA;&#x672C;&#x4E0A;&#x662F; client.indices().xxx

构建 CreateIndexRequest 对象

@Test
public 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 对象

@Test
public 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 对象

@Test
public void testSearchIndex() {

    GetIndexRequest request = new GetIndexRequest("blog1");
    try {
        GetIndexResponse getIndexResponse =
                client.indices().get(request, RequestOptions.DEFAULT);
        Map> aliases = getIndexResponse.getAliases();
        Map mappings = getIndexResponse.getMappings();
        Map settings = getIndexResponse.getSettings();
        log.info("[aliases: {}]", aliases);
        log.info("[mappings: {}]", mappings);
        log.info("[settings: {}", settings);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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

可以根据 response 获取 aliases , mappings , settings 等等 和 Kibana 中返回的一样

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

5.插入文档 client.index

插入文档 需要使用 IndexRequest 对象 , 注意 不是 InsertRequest , 不知道为什么不这样定义 感觉会更加好理解

request.source(blogInfoJsonStr, XContentType.JSON);

@Test
public 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() 返回文档数据

@Test
public 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();
    }
}

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

7.删除文档 client.delete

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

@Test
public 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小屋
欢迎关注个人公众号

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

Original: https://www.cnblogs.com/askajohnny/p/16825264.html
Author: AskaJohnny
Title: Elasticsearch rest-high-level-client 基本操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/800168/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球