Elasticsearch的基本操作CRUD

配置Maven

<dependencies>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!--        客户端-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.6</version>
        </dependency>

    </dependencies>
package com.dong;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.dong.entity.User;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import javax.swing.*;
import java.io.IOException;
import java.net.Authenticator;
/**
 * @author 东
 * @date 2021/6/4
 */
public class Test1 {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200,"http"))
        );

        //-------------------对索引(index)的操作----------------
        //createIndex(client);
        //getIndex(client);
        //deleteIndex(client);
        //http://localhost:9200/_cat/indices?v   查看所有的索引Index

        //----------------------单条数据的crud-----------------------
        //InsertData(client);
        //updateData(client);
        //selectDate(client);
        //deleteData(client);

        //------------------------------复杂数据------------------------------
        //插入多条数据
        //insertMoreData(client);
        //查询所有的数据
        //selectAllData(client);
        //根据条件查询数据
        //selectAllDataByCondition(client);
        //查询所有根据多个条件 (分页、排序、过滤字段)
        //selectAllDateByCondition_ByPage_BySort_ByFetch(client);
        //查询所有数据   (必须有 和 组合有)
        //selectAllDataByMustOrShould(client);
        //根据age的范围查询
        //SelectAllDateByAgeRange(client);


        client.close();

    }

    private static void SelectAllDateByAgeRange(RestHighLevelClient client) throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
        rangeQuery.gte(18);
        rangeQuery.lt(30);


        SearchSourceBuilder build = new SearchSourceBuilder().query(rangeQuery);

        searchRequest.source(build);
        SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);


        SearchHits hits = res.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(res.getTook());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    private static void selectAllDataByMustOrShould(RestHighLevelClient client) throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        //必须含有
        boolQueryBuilder.must(QueryBuilders.matchQuery("age",18));
//        boolQueryBuilder.mustNot(...);必须没有

//        boolQueryBuilder.should(q1);组合或
//        boolQueryBuilder.should(q2);


        SearchSourceBuilder build = new SearchSourceBuilder().query(boolQueryBuilder);


        searchRequest.source(build);
        SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);


        SearchHits hits = res.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(res.getTook());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    private static void selectAllDateByCondition_ByPage_BySort_ByFetch(RestHighLevelClient client) throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        SearchSourceBuilder build = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());

        //分页
        build.from(0);
        build.size(3);
        //排序
        build.sort("age", SortOrder.DESC);

        //过滤字段
        String[] include = {"name"};
        String[] excludes = {};
        build.fetchSource(include, excludes);

        searchRequest.source(build);
        SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);


        SearchHits hits = res.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(res.getTook());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    private static void selectAllDataByCondition(RestHighLevelClient client) throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("name","暂")));
        SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);


        SearchHits hits = res.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(res.getTook());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    private static void selectAllData(RestHighLevelClient client) throws IOException {
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);


        SearchHits hits = res.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(res.getTook());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    private static void insertMoreData(RestHighLevelClient client) throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "暂时", "age", "19"));
        bulkRequest.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "礼物", "age", "13"));
        bulkRequest.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "66", "age", "27"));

        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);

        System.out.println(bulk.getTook());
        System.out.println(bulk.getItems());
    }

    private static void deleteData(RestHighLevelClient client) throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest().index("user").id("1002");
        DeleteResponse res = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println("删除" + res.getResult());
    }

    private static void selectDate(RestHighLevelClient client) throws IOException {
        GetRequest getRequest = new GetRequest();
        getRequest.index("user").id("1001");
        GetResponse res = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(res.getSourceAsString());
    }

    private static void updateData(RestHighLevelClient client) throws IOException {
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("user").id("1001");
        updateRequest.doc(XContentType.JSON,"sex", "女的");

        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println("修改数据" + update.getResult());
    }

    private static void InsertData(RestHighLevelClient client) throws IOException {
        //如果插入的id不存在系统就会insert,没写id,系统就会自动随机生成
        //如有存在就Uptate,相当是 直接覆盖了(Override)
        //插入数据结果UPDATED


        //创建请求体
        IndexRequest indexRequest = new IndexRequest().index("user").id("1002");


        User user = new User("东东", "男的", 23);
        String s = JSONUtil.parseObj(user).toString();
        System.out.println(s);

        //设置数据和存储类型
        indexRequest.source(s, XContentType.JSON);

        //准备发送
        IndexResponse res = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("插入数据结果" + res.getResult());
    }

    private static void deleteIndex(RestHighLevelClient client) throws IOException {
        AcknowledgedResponse res = client.indices().delete(new DeleteIndexRequest("user"), RequestOptions.DEFAULT);
        System.out.println("删除索引 " + res.isAcknowledged());
    }

    private static void getIndex(RestHighLevelClient client) throws IOException {
        GetIndexResponse user = client.indices().get(new GetIndexRequest("user"), RequestOptions.DEFAULT);
        System.out.println(user.getAliases());
        System.out.println(user.getMappings());
        System.out.println(user.getSettings());
    }

    private static void createIndex(RestHighLevelClient client) throws IOException {
        //注意这里的版本不是Admin的
        CreateIndexRequest request = new CreateIndexRequest("user");
        CreateIndexResponse res = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println("创建" + res.isAcknowledged());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值