文章目录
- 前言
- 一、整合检索服务
- 1.1 创建 gulimall-search 模块
- 1.2 配置 Maven 依赖
- 1.3 搜索服务注册到注册中心
- 1.4 新增 es 配置类
- 1.5 测试 RestHighLevelClient 组件
- 二、存储数据到 ES
- 2.1 测试 ES 简单插入数据
- 2.2 测试 ES 查询复杂语句
- 2.3 读入数据
前言
前面记录了 Elasticsearch 全文检索的入门篇和进阶检索。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来实现全文检索,来达到商品检索的功能。
一、整合检索服务
检索服务单独作为一个服务,就称作 gulimall-search 模块。
1.1 创建 gulimall-search 模块
点击 Next 勾选 Spring Web 依赖,点击 finish 即可
1.2 配置 Maven 依赖
1.添加 es 高阶客户端
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.2</version>
</dependency>
2.选择 java 和 elasticsearch 版本
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.4.2</elasticsearch.version>
</properties>
3.将之前的 common 包导入
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
添加完依赖后,我们就可以将搜索服务注册到 nacos 注册中心了。 nacos 注册中心的用法在前面几篇文章中也详细讲解过,这里需要注意的是要先启动 nacos 注册中心,才能正常注册 gulimall-search 服务。
1.3 搜索服务注册到注册中心
spring.application.name=gulimall-search
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
给启动类添加服务发现注解:@EnableDiscoveryClient,这样 gulimall-search 服务就可以被注册中心发现了。
因 common 模块依赖数据源,但 search 模块不依赖数据源,所以该模块需要移除数据源依赖,检索服务启动类如下
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GulimallSearchApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallSearchApplication.class, args);
}
}
1.4 新增 es 配置类
@Configuration
public class ElasticsearchConfig {
@Bean
// 给容器注册一个 RestHighLevelClient,用来操作 ES
// 参考官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.9/java-rest-high-getting-started-initialization.html
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("192.168.57.129", 9200, "http")));
}
}
1.5 测试 RestHighLevelClient 组件
@RunWith(SpringRunner.class)
@SpringBootTest
public class GulimallSearchApplicationTests {
@Resource
private RestHighLevelClient restHighLevelClient;
@Test
public void contextLoads() {
System.out.println(restHighLevelClient);
}
}
运行结果如下所示,打印出了 RestHighLevelClient。说明自定义的 ES Client 自动装载成功。
二、存储数据到 ES
2.1 测试 ES 简单插入数据
ElasticsearchConfig 安全配置
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();
}
测试类
/**
* 测试存储数据到es
* 更新也可以
* @throws IOException
*/
@Test
public void indexData() throws IOException {
IndexRequest index = new IndexRequest("users");
index.id("1");
//第一种:index.source("userName","zhangsan","age","18","gender","男");
//第二种:
User user = new User();
user.setUserName("zhangsan");
user.setAge(18);
user.setGender("男");
String jsonString = JSON.toJSONString(user);
//要保存的数据
index.source(jsonString, XContentType.JSON);
//执行操作
IndexResponse response = restHighLevelClient.index(index, ElasticsearchConfig.COMMON_OPTIONS);
//提取有用的响应数据
System.out.println(response);
}
@Data
class User{
private String userName;
private String gender;
private Integer age;
}
控制台打印数据
测试数据存储到 es 成功