3、ElasticSearch全文搜索引擎之transport客户端的文档操作

1、新增文档
     /**
     * 新增文档
     */
    @Test
    public void insert() throws IOException {
        XContentBuilder contentBuilder= XContentFactory.jsonBuilder()
                .startObject()
                .field("id","3")
                .field("name","admin")
                .field("age",30)
                .field("nickname","admin")
                .field("brithday","2023-10-01")
                .field("remark","菜鸟成长记")
                .endObject();
        IndexResponse indexResponse = client.prepareIndex("s2", "user", "3")
                .setSource(contentBuilder)
                .get();
        System.out.println(indexResponse.status());
    }

2、获取文档

    /**
     * 根据id查看文档
     */
    @Test
    public void getById() {
        GetResponse response = client.prepareGet("s2", "user", "3").get();
        System.out.println(response.getSourceAsMap());
    }
	
	//批量查询  multiGet
    @Test
    public void multiGet() throws IOException, ExecutionException, InterruptedException {
        MultiGetRequest request = new MultiGetRequest();
        request.add("s2", "user", "2");
        request.add("s2", "user", "3");
        MultiGetResponse multiGetItemResponses = client.multiGet(request).get();

        for (MultiGetItemResponse response : multiGetItemResponses) {
            System.out.println("查询内容:" + response.getResponse().getSourceAsMap());
        }
    }
	
	@Test
    public void query() {
        //match_all 查询所有
        MatchAllQueryBuilder matchAllQuery = QueryBuilders.matchAllQuery();
        //match 查询
        MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", "lisi");
        //mutilMatch 查询
        MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("周星驰影帝", "name", "nickname");
        //termQuery查询
        QueryBuilder termQuery = QueryBuilders.termQuery("name", "lisi1");
        //termsQuery查询
        TermsQueryBuilder termsQuery = QueryBuilders.termsQuery("name", "周星驰", "影帝");
        //范围查询
        QueryBuilder rangeQuery = QueryBuilders.rangeQuery("age").from(18).to(100);
        //通配符查询 * 零个或多个
        QueryBuilder wildcardQuery = QueryBuilders.wildcardQuery("name","周*");
        //前缀查询
        QueryBuilder prefixQuery = QueryBuilders.prefixQuery("author","周");
        //模糊查询 查询类型的
        QueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name","ad");
        //id查询
        QueryBuilder idsQuery = QueryBuilders.idsQuery().addIds("1","2","4");
        // + 代表必须有 -代表没有
        QueryBuilder queryString = QueryBuilders.queryStringQuery("+周星驰 -sss");
        //组合查询
        QueryBuilder boolQuery = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("author", "周星驰"))
                .mustNot(QueryBuilders.matchQuery("title", "梁朝伟"))
                .should(QueryBuilders.matchQuery("title", "影帝"))
                .filter(QueryBuilders.rangeQuery("id").gte("1"));

        //查询
        SearchRequestBuilder index3 = client.prepareSearch("s2")
                .setQuery(matchAllQuery)
                .setSize(5);
        //获取响应
        SearchResponse searchResponse = index3.get();
        //获取数据
        SearchHits hits = searchResponse.getHits();
        //打印数据
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsMap());
        }
    }
	
	//聚合查询
    @Test
    public void test(){
        AggregationBuilder aggregationBuilder= AggregationBuilders.max("max").field("age");
        SearchResponse index3 = client.prepareSearch("s2").addAggregation(aggregationBuilder).get();
        Max max = index3.getAggregations().get("max");
        System.out.println("最大年龄:" + max.getValue());
    }

3、修改文档

    @Test
    public void update() throws IOException, ExecutionException, InterruptedException {
        UpdateRequest updateRequest = new UpdateRequest();
        //内容构建
        XContentBuilder contentBuilder=XContentFactory.jsonBuilder()
                .startObject()
                .field("name","admin3")
                .endObject();
        //修改请求
        updateRequest.index("s2")
                .type("user")
                .id("3")
                .doc(contentBuilder);

        UpdateResponse updateResponse = client.update(updateRequest).get();
        System.out.println("修改结果:" + updateResponse.status()); //修改结果:OK
    }

4、删除文档

   /**
     * 根据ID删除
     */
    @Test
    public void deleteById() {
        DeleteResponse response = client.prepareDelete("s2", "user", "3").get();
        System.out.println(response.status());
    }

    /**
     * 通过查询条件删除
     */
    @Test
    public void deleteByCondition() {
        BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.termQuery("a", "1")) //查询条件
                .source("s2") //索引名
                .get();//执行
        System.out.println("删除文档的数量:" + response.getDeleted());
    }

    /**
     * 通过查询条件删除 异步带回调函数
     */
    @Test
    public void deleteByConditionWithCallback() {
        DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.termQuery("a", "1")) //查询条件
                .source("s2")
                .execute(new ActionListener<BulkByScrollResponse>() {
                    @Override
                    public void onResponse(BulkByScrollResponse response) {
                        System.out.println("删除文档的数量:" + response.getDeleted());
                    }

                    @Override
                    public void onFailure(Exception e) {

                    }
                });
    }
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值