1、检索案例——
SearchRequest searchRequest = new SearchRequest("t11_pop*");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.from(0);
searchSourceBuilder.size(10);
searchSourceBuilder.sort("price", SortOrder.DESC);
searchSourceBuilder.fetchSource(new String[]{"*"}, Strings.EMPTY_ARRAY);
BoolQueryBuilder boolQueryBuilder= QueryBuilders.boolQuery();
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery("Java从入门到放弃");
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "张三");
boolQueryBuilder.filter(new ExistsQueryBuilder("name"))
.filter(new ExistsQueryBuilder("title"));
boolQueryBuilder.must(queryStringQueryBuilder)
.must(queryStringQueryBuilder)
.should(queryStringQueryBuilder)
.mustNot(queryStringQueryBuilder);
//添加请求方法
searchSourceBuilder.query(boolQueryBuilder);
//添加请求体
searchRequest.source(searchSourceBuilder);
SearchResponse response = null;
try {
response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
return JSONObject.parseObject(response.toString());
2、高亮、过滤filter
SearchRequest searchRequest = new SearchRequest("t11_pop*");
BoolQueryBuilder boolQueryBuilder= QueryBuilders.boolQuery();
QueryStringQueryBuilder queryStringQueryBuilder = QueryBuilders.queryStringQuery("Java从入门到放弃");
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "张三");
boolQueryBuilder.filter(new ExistsQueryBuilder("name"))
.filter(new ExistsQueryBuilder("title"));
boolQueryBuilder.must(queryStringQueryBuilder)
.must(queryStringQueryBuilder)
.should(termQueryBuilder)
.mustNot(termQueryBuilder);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.requireFieldMatch(false)
.field("*")
.preTags("")
.postTags("");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder
.from(0)
.size(10)
.sort("price", SortOrder.DESC)
.fetchSource(new String[]{"*"}, Strings.EMPTY_ARRAY)
.highlighter(highlightBuilder)
.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
long value = searchResponse.getHits().getTotalHits().value;
float maxScore = searchResponse.getHits().getMaxScore();
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
Map highlightFields = hit.getHighlightFields();
Set> entrySet = highlightFields.entrySet();
for (Map.Entry entry :entrySet) {
System.out.println("高亮字段为:" + entry.getKey());
System.out.println("高亮结果为:" + entry.getValue().fragments()[0].toString());
}
}
3、聚合查询一
SearchRequest searchRequest = new SearchRequest("fruit");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder
.query(QueryBuilders.matchAllQuery()) //查询条件
//.aggregation(AggregationBuilders.sum("sum_price").field("price"))//用来设置聚合处理 sum
//.aggregation(AggregationBuilders.avg("avg_price").field("price")) //用来设置聚合处理 avg
.aggregation(AggregationBuilders.max("max_price").field("price")) //max
.size(0);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Aggregations aggregations = searchResponse.getAggregations();
ParsedMax parsedMax = aggregations.get("max_price");
System.out.println(parsedMax.getValue());
4、聚合查询二
SearchRequest searchRequest = new SearchRequest("fruit");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder
.query(QueryBuilders.matchAllQuery()) //查询条件
.aggregation(AggregationBuilders.terms("title_group").field("title"))//用来设置聚合处理
.size(0);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//处理聚合结果
Aggregations aggregations = searchResponse.getAggregations();
ParsedStringTerms parsedStringTerms = aggregations.get("title_group");
List extends Terms.Bucket> buckets = parsedStringTerms.getBuckets();
for (Terms.Bucket bucket : buckets) {
System.out.println(bucket.getKey() + " "+bucket.getDocCount());
}