开发者学堂课程【SpringBoot 实战教程: SpringBoot 整合 ElasticSearch】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/651/detail/10823
SpringBoot 整合 ElasticSearch
1首先进行架包依赖,以下是 springboot 提供的相关依赖,放入工程中,创建好工程,做好 web 整合,写好启动类。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2、因为访问 elasticsearch 是远程服务器上的,在 liunx 下的,所以需要做全局配置,指明相应的 IP 地址以及端口号,创建 application.yml 格式。
application.yml:
spring:
data:
elasticsearch:
cluster-nodes:192.168.25.129:9300
指明 elasticsearch 的 IP 地址和端口号,9300是 java 进行访问端口号,web 端是9200
local:false
是否是本地访问,不是本地访问
repositories:
是否进行存储
enabled:true
属性
3、把 elasticsearch 存储的数据进行查询,因为是以文档的形式进行存储,都是阶层格式,如何查询出的阶层数据,应该封装成相应的实体类对象,所以首先应该封装实体类队形,提取一个 user 类,它包含"first_ name ""last_ name ""age""about" "interests"五个属性,定义实体类,user。
封装实体类,存储时有 ID,所以要把 ID 加上。
package com. qianfeng ·pojo;
import java .util.List;
@Document(indexName="userindex",type="user")
指明相应的索引和类型,否则会报错
public class User
{
@id 用注解指明 id
Private
Long
id;
Private
String first name ;
Private
String
Last
name ;
private int
age;
Private
String
about;
Private
List<String>interests ;
有多个兴趣,用对应的阶层数组,到实体类中用集合进行表示
最后生成 set,get 方法
public Long getId()
{
Return
id;
}
public void setId (Long
id)
{
4、实现搜索,创建 controller,TestController。
package com. qianfeng. controller;
import org. spring framework . beans. factory . annotation . Autowired;
Import
org.springframework.data.elasticsearch.core. ElasticsearchTe
import org. spring framework. stereotype . Controller;
@Controller
public class TestController
{
/ /SpringBoot 在启动时自动配置了 ElasticsearcheTemplate
@Autowired
Private
ElasticsearchTemplate elasticSearchTemplate;
实现搜索直接用提供的模版即可
@RequestMapping(" / search")
@ResponseBody
Public
String
findDoc ()
查出的是文档,因为存储时就是文档
{
//构造搜索条件,比如年龄大于20,或年龄小于30的条件
有很多功能构成不同的条件,根据需要构建的条件,进行选择,比如需要查找 first name,也就是含有,存在
QueryBuilder builder = QueryBuilders.existsQuery ("first
_
name
‘’
)
;
SearchQuery searchQuery=new
Native SearchQueryBuilder () . withQuery (builder )
.
build
();
创建 SearchQuery 对象,SearchQuery 是接口类型的。只要输入.with,有很多以 with 开头可以设置的过滤条件,比如让某些属性高亮显示等,设置索引等,这也它具备的特有的功能,如果不设置相应的功能,直接调用 build 方法,build 方法最后会返回 SearchQuery 的类型的子类对象
List
<user>
users
=
elasticSearchTemplate.queryForList(searchQuery,User .class) ;
搜索条件构造好后,使用 springboot 提供的模版实现查找。因为查出来的肯定是多个,写搜索条件,后面是文档封装成实体类类型
for (User user :users)
{
System. out. println (user) ;
}
在 user.java 中加入 tostring 方法。
r
e
turn
‘’
succes
s‘’
;
加字符串的返回值
}
在 springboot 中可以借助 Template 很方便的实现各种相应的对 elasticsearch 搜索引擎的操作。
5、最后在启动类中进行扫描,pojp 也会进行扫描。
@SpringBootApplication(scanBasePackages="com. qianfeng"
)
6、启动,controller 的访问路径是 search,含有 first name 都能查出来,存储了三个人,三个人都含有 first name,所以在控制台打印是三个人的信息,输入localhost:8080/search
。
查看控制台,可以看到把 jane,john,douglas 三个人的信息都被打印出来。
这就是 springboot 中如何整合 elasticsearch 的方式。