【大数据】elasticsearch客户端Java api调用查询

根据我的另一篇文章对照看。elasticsearch进阶查询

查询代码如下

@SpringBootTest
public class QueryTest {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    private String indexName = "bank";

    /**
     * 全查  按照年龄降序排序  分页 =>limit 0,5
     */
    @Test
    public void query1() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(matchAllQueryBuilder);
        searchSourceBuilder.sort("balance", SortOrder.DESC);
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(5);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        SearchHit[] data = hits.getHits();
        if (ArrayUtils.isNotEmpty(data)) {
            for (SearchHit dataItem : data) {
                String sourceAsString = dataItem.getSourceAsString();
                BankAccountVo bankAccountVo  = JSONUtils.toBean(sourceAsString, BankAccountVo .class);
                System.out.println(bankAccountVo.getFirstName()+"====="+bankAccountVo.getAddress());
            }
        }
    }

    /**
     * 查询地址为 地址含有mill 的记录
     */
    @Test
    public void query2() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("address","mill");
        searchSourceBuilder.query(matchQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("结果:"+search.status());
        SearchHits hits = search.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getFirstName()+"-----"+bankAccountVo.getAddress());
        }
    }

    /**
     * 查看部分字段
     * @throws IOException
     */
    @Test
    public void query3() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query( QueryBuilders.matchAllQuery());
        searchSourceBuilder.fetchSource(new String[]{"balance"},null);
        searchRequest.source(searchSourceBuilder);
        System.out.println("构建结果:"+searchSourceBuilder.toString());
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getFirstName()+"-----"+bankAccountVo.getAddress());
        }
    }

    /**
     *multi_match  多字段查询  指定字段中出现了目标文本都行
     * @throws IOException
     */
    @Test
    public void query4() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //变换的是这部分==start
        MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("mill","address","email","city");
        searchSourceBuilder.query(multiMatchQueryBuilder);
        //变换的是这部分==end
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getAddress()+"-----"+bankAccountVo.getEmail()+"-----"+bankAccountVo.getCity());
        }
    }

    /**
     * bool 查询  复合查询  性别必须是女,地址包含mill,年龄不等于38
     * @throws IOException
     */
    @Test
    public void query5() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //变换的是这部分==start
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("gender", "M");
        boolQueryBuilder.must(matchQueryBuilder);
        MatchQueryBuilder ageQueryBuilder = QueryBuilders.matchQuery("age", 38);
        boolQueryBuilder.mustNot(ageQueryBuilder);
        //变换的是这部分==end
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getAddress()+"-----"+bankAccountVo.getEmail()+"-----"+bankAccountVo.getCity()+bankAccountVo.getAge());
        }
    }

    /**
     * #should 应该可能的意思。顾名思义,满足的话最好,不满足也没事
     */
    @Test
    public void query6() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //变换的是这部分==start
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("gender", "M");
        boolQueryBuilder.must(matchQueryBuilder);
        MatchQueryBuilder ageQueryBuilder = QueryBuilders.matchQuery("age", 38);
        boolQueryBuilder.mustNot(ageQueryBuilder);
        MatchQueryBuilder shouldBuilder = QueryBuilders.matchQuery("city", "Blackgum");
        boolQueryBuilder.should(shouldBuilder);
        //变换的是这部分==end
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getAddress()+"-----"+bankAccountVo.getEmail()+"-----"+bankAccountVo.getCity()+bankAccountVo.getAge());
        }
    }

    /**
     * filter 用法与must 级别一致, 区别在于 filter没有参与评分
     */
    @Test
    public void query7() throws IOException {
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //变换的是这部分==start
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("gender", "M");
        boolQueryBuilder.filter(matchQueryBuilder);
        MatchQueryBuilder ageQueryBuilder = QueryBuilders.matchQuery("age", 38);
        //mustNot 本身也是一个过滤器
        boolQueryBuilder.mustNot(ageQueryBuilder);
        MatchQueryBuilder shouldBuilder = QueryBuilders.matchQuery("city", "Blackgum");
        boolQueryBuilder.should(shouldBuilder);
        //变换的是这部分==end
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits.getHits()) {
            BankAccountVo bankAccountVo = JSONUtils.toBean(hit.getSourceAsString(), BankAccountVo.class);
            System.out.println(bankAccountVo.getAddress()+"-----"+bankAccountVo.getEmail()+"-----"+bankAccountVo.getCity()+bankAccountVo.getAge());
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值