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();
查询的方式有很多中,但是思想都差不多,总结了一张图
有时间可以对比postman上的HTTP检索方式,会发现相似度很大,API就会很快上手。