Elasticsearch Java REST高级客户端SearchApi
Elasticsearch Java REST高级客户端SearchApi
版本:Elasticsearch 7.2.0
本节讲述一下Elasticsearch的条件搜索、排序、分组和聚合,以几个例子简单实现以下操作
1.matchAllQuery查询
2.matchQuery查询
3.termQuery查询
4.聚合操作aggregation
5.创建和关闭客户端
6.maven
对人工智能感兴趣的同学,可以点击以下链接:
现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。
https://www.cbedai.net/u014646662
1.matchAllQuery查询
/**
* matchAll查询
*/
public static void matchAllQuery() {
RestHighLevelClient client = getClient();
// 这里可以不指定索引,也可以指定多个
SearchRequest searchRequest = new SearchRequest("movies");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchRequest.source(searchSourceBuilder);
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
// 从第一条开始,包括第一条
searchSourceBuilder.from(0);
// 查询30条
searchSourceBuilder.size(3);
// 先按year倒排
searchSourceBuilder.sort(SortBuilders.fieldSort("year").order(SortOrder.DESC));
// 再按id正排
searchSourceBuilder.sort("id");
SearchResponse search = null;
try {
search = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
search.getHits().forEach(System.out::println);
close(client);
}
2.matchQuery查询
/**
* match查询
*/
public static void matchQuery() {
RestHighLevelClient client = getClient();
// 这里可以不指定索引,也可以指定多个
SearchRequest searchRequest = new SearchRequest("movies");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchRequest.source(searchSourceBuilder);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "you life");
searchSourceBuilder.query(matchQueryBuilder);
// // 模糊查询
// matchQueryBuilder.fuzziness(Fuzziness.AUTO);
// // 前缀查询的长度
// matchQueryBuilder.prefixLength(3);
// // max expansion 选项,用来控制模糊查询
// matchQueryBuilder.maxExpansions(10);
searchSourceBuilder.from(0);
searchSourceBuilder.size(32);
// 按评分排序
searchSourceBuilder.sort("_score");
SearchResponse search = null;
try {
search = client.search(searchRequest, RequestOptions.DEFAULT);
search.getHits().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
} finally {
close(client);
}
}
3.termQuery查询
public static void termQuery() {
RestHighLevelClient client = getClient();
SearchRequest request = new SearchRequest("movies");
SearchSourceBuilder builder = new SearchSourceBuilder();
request.source(builder);
builder.from(0);
builder.size(5);
builder.query(QueryBuilders.termQuery("title", "you"));
SearchResponse search = null;
try {
search = client.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
search.getHits().forEach(System.out::println);
close(client);
}
4.聚合操作aggregation
public static void aggregation() {
RestHighLevelClient client = getClient();
SearchRequest request = new SearchRequest("movies");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
AvgAggregationBuilder avg = AggregationBuilders.avg("id_avg").field("id");
MaxAggregationBuilder max = AggregationBuilders.max("id_max").field("id");
MinAggregationBuilder min = AggregationBuilders.min("id_min").field("id");
TermsAggregationBuilder group = AggregationBuilders.terms("year_group").field("year");
group.subAggregation(avg).subAggregation(max).subAggregation(min);
searchSourceBuilder.profile(true);
searchSourceBuilder.aggregation(group);
request.source(searchSourceBuilder);
SearchResponse search = null;
try {
search = client.search(request, RequestOptions.DEFAULT);
Aggregations aggregations = search.getAggregations();
Terms terms = aggregations.get("year_group");
//打印全部分组
terms.getBuckets().forEach( bucket ->
bucket.getAggregations().asMap().forEach((k,v) ->
System.out.println(bucket.getKeyAsString()+"---" +k + "->" + ((SingleValue)v).value()))
);
//只打印2000年的内容
String year = "2000";
Bucket bucket = terms.getBucketByKey(year);
SingleValue maxAgg = bucket.getAggregations().get("id_max");
SingleValue avgAgg = bucket.getAggregations().get("id_avg");
SingleValue minAgg = bucket.getAggregations().get("id_min");
System.out.println(year+"年最大id:"+maxAgg.value());
System.out.println(year+"年平均id:"+avgAgg.value());
System.out.println(year+"年最小id:"+minAgg.value());
} catch (IOException e) {
e.printStackTrace();
}finally {
close(client);
}
}
5.创建和关闭客户端
/**
* 关闭客户端
*
* @param client
*/
private static void close(RestHighLevelClient client) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取客户端
*
* @return
*/
private static RestHighLevelClient getClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("elk-node01", 9200, "http"), new HttpHost("elk-node02", 9200, "http"),
new HttpHost("elk-node03", 9200, "http")));
return client;
}
6.maven
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>7.2.0</version>
<!-- <version>6.7.1</version> -->
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.2.0</version>
<!-- <version>6.7.1</version> -->
</dependency>
还没有评论,来说两句吧...