Elasticsearch API查询

1. 查询索引中的全部数据
public class EsTest_Doc_Query {
    public static void main(String[] args) throws IOException {
		RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http"))
        );

        // 1.查询索引中的全部数据
        
        // 修改部分开始#######
        SearchRequest request = new SearchRequest();
        request.indices("rapper");
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        
        // 修改部分结束#######
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        System.out.println(response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        client.close();
     }
}
2. 条件查询
        SearchRequest request = new SearchRequest();
        request.indices("rapper");

        request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","男")));
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
3. 分页查询
        SearchRequest request = new SearchRequest();
        request.indices("rapper");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        // 页码 =(当前页数-1)* 每页数目 例如:(第二页-1)*2=2, from =2
        builder.from(2);
        builder.size(2);

        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
4. 查询排序
        SearchRequest request = new SearchRequest();
        request.indices("rapper");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.sort("age", SortOrder.DESC);

        request.source(builder);
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
5. 过滤字段
		SearchRequest request = new SearchRequest();
        request.indices("rapper");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        String[] include={"name"};
        String[] exclude={"age"};
        builder.fetchSource(include,exclude); //此时只有name

        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
6. 组合查询
        SearchRequest request = new SearchRequest();
        request.indices("rapper");
        
        SearchSourceBuilder builder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuiler = QueryBuilders.boolQuery();
        
        boolQueryBuiler.must(QueryBuilders.matchQuery("sex","女"));
        boolQueryBuiler.mustNot(QueryBuilders.matchQuery("name","陈折涵"));
//        boolQueryBuiler.should(QueryBuilders.matchQuery("sex","男")) ;

        builder.query(boolQueryBuiler);
        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
7. 范围查询
 		SearchRequest request = new SearchRequest();
        request.indices("rapper");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        SearchSourceBuilder builder = new SearchSourceBuilder();
        RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
        rangeQuery.gte(20);
        rangeQuery.lt(40);

        builder.query(rangeQuery);
        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
8. 高亮查询
		SearchRequest request = new SearchRequest();
        request.indices("rapper");

        // 设置查询条件    termsQuery 和 termQuery
        SearchSourceBuilder builder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "刘甜1");// 查询不到

        // 设置高亮,就是把目标字段使用前端标签包起来
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("name");
        highlightBuilder.preTags("<font color='red'>");
        highlightBuilder.postTags("</font>");
        builder.highlighter(highlightBuilder);

        builder.query(termQueryBuilder);
        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
9. 聚合查询-最大最小平均值
 		SearchRequest request = new SearchRequest();
        request.indices("rapper");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        // 创建聚合builder
        AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
        builder.aggregation(aggregationBuilder);

        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();

10. 聚合查询-分组
        SearchRequest request = new SearchRequest();
        request.indices("rapper");
        SearchSourceBuilder builder = new SearchSourceBuilder();
        // 创建聚合builder,terms为自定义名称
        TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("age_group").field("age");
        builder.aggregation(aggregationBuilder);

        request.source(builder);

        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();

查询的方式有很多中,但是思想都差不多,总结了一张图
Query
有时间可以对比postman上的HTTP检索方式,会发现相似度很大,API就会很快上手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值