有两个问题:一是es的自动分页的问题,查询得到显示的数据只有十条,但统计命中记录数385条
二是怎么嵌套聚合查询,在下面的查询过程中两个聚合是并列的
1.引入和es同版本的依赖
<!--elasticsearch rest client-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.2</version>
</dependency>
<properties>
<java.version>1.8</java.version>
<!--===注意这里要配置es的版本
即使在下面的<dependency>中引入了7.4.2版本的esclient
打开侧边的maven可以看到当前模块的es版本是6.4.3
这是因为当前模块使用的spring-boot-starter-parent的版本中配置了es的版本为6.4.3
如果要覆盖spring-boot-starter-parent的配置 就在这里重新写版本=================-->
<elasticsearch.version>7.4.2</elasticsearch.version>
</properties>
2.创建配置类
package com.kaki.gulimall.search.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ElasticSearchConfig {
/**
* 使用 java api 操作 elasticsearch
* 1. 导入同版本的依赖 elasticsearch-rest-high-level-client
* 2. 编写配置类 @Bean 注入到容器 获取 client 对象
* 3. 测试
*/
//这里没有使用 @Bean注解 放到容器中 静态方法 直接通过类名调用 单例模式
// 访问es 有安全鉴别 这个方法给请求设置 RequestOptions 官方文档中有
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 getEsClient(){
RestHighLevelClient client = new RestHighLevelClient(