Elasticsearch、Kibana基础知识(三) -- 整合Spring Boot

437 阅读1分钟

1. 引入

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>{version}</version>
</dependency>
  @Bean
  public RestHighLevelClient ESRestClient() {
    return new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
  }
可能遇到的报错1:
Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected

-- highlevelclient版本和es版本不一致导致,因为springboot默认会管理es的版本,很有可能和你引入的client版本不一致
在<properties>中覆盖版本即可
<elasticsearch.version>7.4.2</elasticsearch.version>

image.png

2. 带条件的查询

以示例数据中的订单数据为例 
GET _cat/indices
GET kibana_sample_data_ecommerce/_search
{
  "query": {
    "match": {
      "customer_gender": "MALE"
    }
  },
  "aggs": {
    "customerAgg": {
      "terms": {
        "field": "customer_id",
        "size": 10
      }
    },
    "priceAgg": {
      "avg": {
        "field": "taxful_total_price"
      }
    }
  }
}

DSL查询结果: image.png

对应代码:

void searchDate() throws IOException {
//		1. 创建检索请求
		SearchRequest request = new SearchRequest();
		request.indices("kibana_sample_data_ecommerce");
		SearchSourceBuilder builder = new SearchSourceBuilder();
		request.source(builder);
//	  设置检索条件
		builder.query(QueryBuilders.matchQuery("customer_gender", "MALE"));
//		builder.from(0);
//		builder.size(20);

//		按照customer_id聚合
		builder.aggregation(AggregationBuilders.terms("customerAgg").field("customer_id").size(10));

//
		builder.aggregation(AggregationBuilders.avg("priceAgg").field("taxful_total_price"));

//		2. 执行检索
		SearchResponse response = client.search(request, COMMON_OPTIONS);

//		3. 处理响应
		System.out.println(request.source());
		SearchHit[] hits = response.getHits().getHits();
		for (SearchHit hit: hits) {
			String sourceAsString = hit.getSourceAsString();
			System.out.println(sourceAsString);
		}
//		获取聚合结果
		Terms customerAgg = response.getAggregations().get("customerAgg");
		customerAgg.getBuckets().forEach(bucket -> System.out.println(bucket.getKey()));
	}

image.png