java操作ElasticSearch相关API

java操作ElasticSearch相关API

一、索引操作

  1. 创建和删除索引

    //1、创建索引
    CreateIndexRequest request = new CreateIndexRequest("posts");
    client.indices().create(request, RequestOptions.DEFAULT);
    //2、删除索引
    DeleteIndexRequest request=new DeleteIndexRequest("posts");
    AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
    

二、文档操作

  1. 添加文档

    @Test
    void contextLoads() throws IOException {
        Post post = postMapper.selectById(2);//数据库查询到的文章
        //构建请求
        IndexRequest request = new IndexRequest("posts").id(String.valueOf(post.getPostId()));
        String json = JSON.toJSONString(post);
        request.source(json, XContentType.JSON);
        client.index(request, RequestOptions.DEFAULT);
    }
    
  2. 批量添加文档

    //批量插入文档
    @Test
    void addAll() throws IOException {
        //构建batch
        BulkRequest bulk = new BulkRequest();
        List<Post> posts = postMapper.selectList(null);
        for (Post post : posts) {
            String json = JSON.toJSONString(post);
            IndexRequest request = new IndexRequest("posts").id(post.getPostId() + "");
            request.source(json, XContentType.JSON);
            bulk.add(request);
        }
        client.bulk(bulk, RequestOptions.DEFAULT);
    }
    

三、查询操作

  1. 普通查询

    @Test
    void get() throws IOException {
        GetRequest request = new GetRequest("posts");
        request.id(120 + "");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());
        Map<String, Object> map = response.getSourceAsMap();
        map.forEach((k, v) -> {
            System.out.println(k + "---" + v);
        });
    }
    
  2. 条件查询

    //根据条件查询
    @Test
    void getCondition() throws IOException {
        //构建查询请求
        SearchRequest request = new SearchRequest("posts");
        //查询对象构建
        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.matchQuery("postContent","狂飙"));
        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //获取命中对象
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }
    
  3. 分页、排序查询

    @Test
    public void pageSearch() throws Exception{
        //构建查询对象
        SearchRequest request=new SearchRequest("posts");
        //构建查询对象
        SearchSourceBuilder builder=new SearchSourceBuilder();
        builder.query(QueryBuilders.matchQuery("postContent","狂飙"));
        String[] exlude={"postContent"};//排除查询字段
        String[] include={};//包含查询字段
        builder.fetchSource(include,exlude);
        builder.sort("postUserId", SortOrder.ASC);//排序
        builder.from(0).size(5);//分页
        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("共查询到:"+hits.getTotalHits()+"条");
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }
    
  4. 范围查询

    @Test
    public void searchRange() throws IOException {
        SearchRequest request=new SearchRequest("posts");
        SearchSourceBuilder builder=new SearchSourceBuilder();
        //构建范围查询对象
        RangeQueryBuilder queryBuilder = QueryBuilders.rangeQuery("postTagId");
        //大于等于
        queryBuilder.gte(1);
        //小于等于
        queryBuilder.lte(10);
        builder.query(queryBuilder);
        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    }
    
  5. 高亮查询

    @Test
    public void searchHilight() throws Exception{
        SearchRequest request=new SearchRequest("posts");
        SearchSourceBuilder builder=new SearchSourceBuilder();
        TermsQueryBuilder query = QueryBuilders.termsQuery("postTitle", "狂飙");
        HighlightBuilder highBuilder=new HighlightBuilder();
        highBuilder.preTags("<font color='res'>")//前缀
            .postTags("</font>")//后缀
            .field("postTitle");//映射字段
        builder.highlighter(highBuilder);
        builder.query(query);
        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值