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>

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值