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);
posted @   辰若月煕  阅读(286)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示