springboot整合elasticsearch的增删查改

1.maven导入pom.xml依赖


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


2.es客户端连接配置类


@Configuration
public class EsRestHighLevelClient {


    @Bean
    public RestHighLevelClient  restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http"))
        );
        return  client;
    }
}


3.基本操作



import com.alibaba.fastjson2.JSONObject;
import com.lxy.bms.domain.User;
import com.lxy.bms.es.EsRestHighLevelClient;
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.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.cluster.metadata.AliasMetadata;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.naming.directory.SearchResult;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@SpringBootTest
class BmsApplicationTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * 创建索引
     *
     * @throws IOException
     */
    @Test
    void insertIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("user");
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        //响应状态
        boolean acknowledged = createIndexResponse.isAcknowledged();
        System.out.println("创建索引操作:" + acknowledged);
        restHighLevelClient.close();
    }

    /**
     * 查询索引
     *
     * @throws IOException
     */
    @Test
    void getIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("user_index");
        GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
        System.out.println(getIndexResponse.getAliases());
        System.out.println(getIndexResponse.getMappings());
        System.out.println(getIndexResponse.getSettings());
        restHighLevelClient.close();
    }

    /**
     * 删除索引
     *
     * @throws IOException
     */
    @Test
    void deleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("user_index");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        boolean acknowledged = delete.isAcknowledged();
        System.out.println("删除索引操作:" + acknowledged);
        restHighLevelClient.close();
    }

    /**
     * 创建文档
     *
     * @throws IOException
     */
    @Test
    void insertIndexDoc() throws IOException {
        IndexRequest request = new IndexRequest();
        request.index("user").id("1001");

        User user = new User();
        user.setUsername("张三");
        user.setAge(30);
        user.setSex("男");
        String userJson = JSONObject.toJSONString(user);
        request.source(userJson, XContentType.JSON);
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());
        restHighLevelClient.close();
    }

    /**
     * 修改文档
     *
     * @throws IOException
     */
    @Test
    void updateIndexDoc() throws IOException {
        UpdateRequest request = new UpdateRequest();
        request.index("user").id("1001");
        User user = new User();
        user.setUsername("李四");
        user.setAge(50);
        user.setSex("女");
        String userJson = JSONObject.toJSONString(user);
        request.doc(userJson, XContentType.JSON);
        UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());
        restHighLevelClient.close();
    }

    /**
     * 查看文档
     *
     * @throws IOException
     */
    @Test
    void getIndexDoc() throws IOException {
        GetRequest request = new GetRequest();
        request.index("user").id("1001");
        GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());
        restHighLevelClient.close();
    }

    /**
     * 删除文档
     *
     * @throws IOException
     */
    @Test
    void deleteIndexDoc() throws IOException {
        DeleteRequest request = new DeleteRequest();
        request.index("user").id("1001");
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        restHighLevelClient.close();
    }

    /**
     * 批量添加文档
     * @throws IOException
     */
    @Test
    void batchInsertIndexDoc() throws IOException {
        BulkRequest request=new BulkRequest();
        //设置多长时间导入一次
        request.timeout ("10s");
        List list=new ArrayList<>();
        list.add(new User("zhangsan",20,"男"));
        list.add(new User("lisi",30,"男"));
        list.add(new User("wangwu",40,"男"));
        for (int i = 0; i < list.size(); i++) {
            request.add(new IndexRequest().index("user").id((10010+i)+"").source(JSONObject.toJSONString(list.get(i)),XContentType.JSON));
        }
        BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        System.out.println(response.getTook());
        System.out.println(response.getItems());
        restHighLevelClient.close();
    }

    /**
     * 批量删除文档
     * @throws IOException
     */
    @Test
    void batchDeleteIndexDoc() throws IOException {
        BulkRequest request=new BulkRequest();
        //设置多长时间导入一次
        request.timeout ("10s");
        List list=new ArrayList<>();
        list.add(new User("zhangsan",20,"男"));
        list.add(new User("lisi",30,"男"));
        list.add(new User("wangwu",40,"男"));
        for (int i = 0; i < list.size(); i++) {
            request.add(new DeleteRequest().index("user").id((10010+i)+""));
        }
        BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        //took 值告诉我们执行整个搜索请求耗费了多少毫秒。
        System.out.println(response.getTook());
        System.out.println(response.getItems());
        restHighLevelClient.close();
    }

    /**
     * 查询索引下的全部文档
     * @throws IOException
     */
    @Test
    void  allQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 条件查询
     * @throws IOException
     */
    @Test
    void  termQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.termsQuery("age","40")));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 分页查询
     * @throws IOException
     */
    @Test
    void pagingQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //从第【(当前页码-1)*每页显示数据条数】开始查询
        builder.from(0);
        //每页查询多少条数据
        builder.size(3);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 条件查询
     * @throws IOException
     */
    @Test
    void fieldQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        String[] excludes={};
        String[] includes={"username"};
        builder.fetchSource(includes,excludes);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 组合查询
     * @throws IOException
     */
    @Test
    void boolQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //must是且 should是或
        boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
        boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
        builder.query(boolQueryBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 范围查询
     * @throws IOException
     */
    @Test
    void rangeQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
        rangeQuery.gte(30);
        rangeQuery.lt(50);
        builder.query(rangeQuery);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 模糊查询
     * @throws IOException
     */
    @Test
    void fuzzyQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //Fuzziness.ONE代表查询相差一个字符的,wangwuw和wangw都会找到wangwu
        FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("username", "wangwuw").fuzziness(Fuzziness.ONE);
        builder.query(fuzziness);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 高亮查询
     * @throws IOException
     */
    @Test
    void highLightQuery() throws IOException {
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("username", "zhangsan");
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        highlightBuilder.preTags("");
        highlightBuilder.postTags("");
        highlightBuilder.field("username");
        builder.highlighter(highlightBuilder);
        builder.query(termsQueryBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 最大值查询
     * @throws IOException
     */
    @Test
    void maxQuery() throws IOException{
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        AggregationBuilder aggregationBuilder= AggregationBuilders.max("maxAge").field("age");
        builder.aggregation(aggregationBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }

    /**
     * 分组查询
     * @throws IOException
     */
    @Test
    void groupQuery() throws IOException{
        SearchRequest request=new SearchRequest();
        request.indices("user");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        AggregationBuilder aggregationBuilder= AggregationBuilders.terms("ageGroup").field("age");
        builder.aggregation(aggregationBuilder);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        System.out.println(response.toString());
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();
    }
}
 
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章