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);