由香港来深圳隔离的第2天---学习ing(ElasticSearch)03

345 阅读2分钟

集成SpringBoot

学习来自于狂神 www.bilibili.com/video/BV17a… 首先看官方文档

image.png

image.png 高级的客户端本质是封装了低级的客户端

  1. 导入依赖
<repositories>
    <repository>
        <id>es-snapshots</id>
        <name>elasticsearch snapshot repo</name>
        <url>https://snapshots.elastic.co/maven/</url>
    </repository>
</repositories>

必须依赖于两个核心包 image.png

  1. 找对象
RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));
                // 用完了要关闭
             client.close();
  1. 分析这个类当中的方法

配置一个基本项目

  • 记得查看es版本依赖和本地的一样,否则会出现连不上的问题
  • 和上面第二点说的一样,我这边创建一个springboot的项目用@Bean去注入我所自己配置的一个RestHighLevelClient 图片.png
  1. 接下来是具体的api测试

创建索引


    void contextLoads() throws IOException {
        // create index
        CreateIndexRequest request = new CreateIndexRequest("kuang_index");
        // execute
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println("createIndexResponse" + createIndexResponse);
    }

判断一个索引在不在 返回true


    void TestExist() throws Exception{
        GetIndexRequest requestGet = new GetIndexRequest("kuang_index");
        boolean exists = client.indices().exists(requestGet, RequestOptions.DEFAULT);
        System.out.println("exists:" + exists);
    }

删除索引 这边的isAcknowledged 会返回true

void TestDelete() throws Exception{
        DeleteIndexRequest request = new DeleteIndexRequest("kuang_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println("delete:" + delete.isAcknowledged());
    }

操作文档~~~~

首先创建一个对象

@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}

添加文档

void testAddDocument() throws Exception{
        User user = new User("Daniel",27);
        IndexRequest indexRequest = new IndexRequest("kuang_index");

        // PUT /kuang_index/_doc/1
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.timeout("1s");
        // data  -----> request
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);

        // client send
        IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("add user:" + index.toString());
    }

查看文档 包括具体信息 exist/get

void testGetDocument() throws Exception{
        // get /index/_doc/1
        GetRequest request = new GetRequest("kuang_index","1");
        // no get _source
        request.fetchSourceContext(new FetchSourceContext(false));
        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println("exists:" + exists);
        
        GetRequest request = new GetRequest("kuang_index","1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsMap());
        System.out.println(response);
    }

更新文档信息

void testUpdate() throws Exception{
        UpdateRequest request = new UpdateRequest("kuang_index", "1");
        request.timeout("1s");
        User user = new User("Daniel",20);
        request.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }

删除文档

void testDelete() throws Exception{
        DeleteRequest request = new DeleteRequest("kuang_index","3");
        request.timeout("1s");
        DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

批量操作,如果需要批量更新,批量删除,在for循环里面写

BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        List<User> userList = new ArrayList<>();
        userList.add(new User("Daneil01",1));
        userList.add(new User("Daneil02",2));
        userList.add(new User("Daneil03",3));
        userList.add(new User("Daneil04",4));
        userList.add(new User("Daneil05",5));
        userList.add(new User("Daneil06",6));
        for (int i = 0; i < userList.size(); i++) {
            bulkRequest.add(new IndexRequest("kuang_index")
                    .id("" + (i+1))
                    .source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.hasFailures());

搜索批量数据,还有一些精确,全部,高亮操作可以查看 sourceBuilder 里面的接口

void getBatchInfo() throws Exception {
        SearchRequest searchRequest = new SearchRequest("kuang_index");
        // query
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // term/match/
//        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "Daniel01");
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.query(matchAllQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        searchRequest.source(sourceBuilder);
        SearchResponse search = client.search(searchRequest,RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(search.getHits()));
        System.out.println("==================================");
        for (SearchHit hit : search.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }

    }