springboot整合es

1、导入依赖

这里的版本要和所按照的ELK版本匹配。

<!--        es-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.15.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.15.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.15.2</version>
        </dependency>

在spring-boot-dependencies中所依赖的ELK版本位6.8.7
配置类:

@Configuration
public class GulimallElasticSearchConfig {

	// @Bean
	// public RestHighLevelClient esRestClient(){
	//     RestHighLevelClient client = new RestHighLevelClient(
	//             RestClient.builder(new HttpHost("192.168.137.14", 9200, "http")));
	//     return  client;
	// }
	public static final RequestOptions COMMON_OPTIONS;
	static {
		RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
		// builder.addHeader("Authorization", "Bearer " + TOKEN);
		// builder.setHttpAsyncResponseConsumerFactory(
		//         new HttpAsyncResponseConsumerFactory
		//                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
		COMMON_OPTIONS = builder.build();
	}
	@Bean
	public RestHighLevelClient esRestClient(){
		RestHighLevelClient client = new RestHighLevelClient(
				RestClient.builder(new HttpHost("101.42.221.186", 9200, "http")));
		return  client;
	}

}

测试类;

	@Test
	public void indexData() throws IOException {
		IndexRequest indexRequest = new IndexRequest ("users");
		Product product = new Product();
		product.setName( "liuyang" );
		product.setStock( 11);
		product.setCategorylevelthreeId( 22 );
		String jsonString = JSON.toJSONString(product);
		//设置要保存的内容
		indexRequest.source(jsonString, XContentType.JSON);
		//执行创建索引和保存数据
		IndexResponse index = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
		System.out.println(index);

	}
}

在这里插入图片描述
取出数据;

	@Test
	public void searchData() throws IOException {
		GetRequest getRequest = new GetRequest(
				"users",
				"ADtOV4EBm4ZP2m-Y5ZLk");

		GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
		System.out.println(getResponse);
		String index = getResponse.getIndex();
		System.out.println(index);
		String id = getResponse.getId();
		System.out.println(id);
		if (getResponse.isExists()) {
			long version = getResponse.getVersion();
			System.out.println(version);
			String sourceAsString = getResponse.getSourceAsString();
			System.out.println(sourceAsString);
			Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();
			System.out.println(sourceAsMap);
			byte[] sourceAsBytes = getResponse.getSourceAsBytes();
		} else {

		}
	}
	@Test
	public void searchData1() throws IOException {
		//1. 创建检索请求
		SearchRequest searchRequest = new SearchRequest();

		//1.1)指定索引
		searchRequest.indices("bank");
		//1.2)构造检索条件
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		sourceBuilder.query( QueryBuilders.matchQuery("address","Mill"));

		//1.2.1)按照年龄分布进行聚合
		TermsAggregationBuilder ageAgg= AggregationBuilders.terms("ageAgg").field("age").size(10);
		sourceBuilder.aggregation(ageAgg);

		//1.2.2)计算平均年龄
		AvgAggregationBuilder ageAvg = AggregationBuilders.avg("ageAvg").field("age");
		sourceBuilder.aggregation(ageAvg);
		//1.2.3)计算平均薪资
		AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
		sourceBuilder.aggregation(balanceAvg);

		System.out.println("检索条件:"+sourceBuilder);
		searchRequest.source(sourceBuilder);
		//2. 执行检索
		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
		System.out.println("检索结果:"+searchResponse);

		//3. 将检索结果封装为Bean
		SearchHits hits = searchResponse.getHits();
		SearchHit[] searchHits = hits.getHits();
		for (SearchHit searchHit : searchHits) {
			String sourceAsString = searchHit.getSourceAsString();
			Product product = JSON.parseObject( sourceAsString, Product.class );
			System.out.println(product);
		}
		//4. 获取聚合信息
		Aggregations aggregations = searchResponse.getAggregations();

		Terms ageAgg1 = aggregations.get("ageAgg");

		for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
			String keyAsString = bucket.getKeyAsString();
			System.out.println("年龄:"+keyAsString+" ==> "+bucket.getDocCount());
		}
		Avg ageAvg1 = aggregations.get("ageAvg");
		System.out.println("平均年龄:"+ageAvg1.getValue());

		Avg balanceAvg1 = aggregations.get("balanceAvg");
		System.out.println("平均薪资:"+balanceAvg1.getValue());


	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值