elasticSearch高级查询

elasticSearch高级查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");

全量查询

searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));

        SearchResponse searchresponse = esClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchresponse.getHits();//数据

        System.out.println(hits.getTotalHits());
        System.out.println(searchresponse.getTook());

        //遍历结果
        for ( SearchHit hit: hits){
            System.out.println(hit.getSourceAsString());
        }

条件查询

searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30)));

        SearchResponse search = esClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits1 = search.getHits();
        for (SearchHit hit:hits1){
            System.out.println(hit.getSourceAsString());
        }

分页查询

SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //从第几条开始(当前页码-1)*每页的显示数据条数
        builder.from(0);
        //一页显示几条
        builder.size(2);
        searchRequest.source(builder);

        SearchResponse search1 = esClient.search(searchRequest, RequestOptions.DEFAULT);

        for (SearchHit hit : search1.getHits()){
            System.out.println(hit.getSourceAsString());
        }

查询排序

builder.sort("age", SortOrder.DESC);

过滤字段

//不包含什么
String[] excludes = {};
//包含什么
String[] includes = {"name"};
builder.fetchSource(includes,excludes);

组合查询

 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        //boolQueryBuilder.must(QueryBuilders.matchQuery("age",30));
        //boolQueryBuilder.must(QueryBuilders.matchQuery("sex","男"));
        //boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex","男"));
        boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
        boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));

        searchSourceBuilder.query(boolQueryBuilder);

范围查询

RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");

        rangeQuery.gte(30);
        rangeQuery.lte(50);

        searchSourceBuilder.query(rangeQuery);

模糊查询

searchSourceBuilder.query(QueryBuilders.fuzzyQuery("name","wangwu").fuzziness(Fuzziness.ONE));

高亮查询

//高亮查询
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");

        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<font color = 'red'>");
        highlightBuilder.postTags("</font");
        highlightBuilder.field("name");

        searchSourceBuilder.highlighter(highlightBuilder);
        searchSourceBuilder.query(termQueryBuilder);

聚合查询

        MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");

        searchSourceBuilder.aggregation(field);

分组查询

//分组查询
        TermsAggregationBuilder field1 = AggregationBuilders.terms("ageGroup").field("age");
        searchSourceBuilder.aggregation(field1);
 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容