一、依赖
创建一个项目,添加 elasticsearch 的相关依赖:
<!--SpringBoot 默认使用 SpringData ElasticSearch 模块进行操作-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
二、自动配置
1、SpringData Elasticsearch 自动配置
(1)ElasticsearchAutoConfiguration 类提供了Client 客户端节点信息,需要配置 ClusterNodes、ClusterName
(2)ElasticsearchDataAutoConfiguration 提供了 ElasticsearchTemplate 操作 ES
(3)ElasticsearchRepositoriesAutoConfiguration 中导入了 ElasticsearchRepository接口,可以通过这个接口对ES进行操作
2、Jest 的自动配置 JestAutoConfiguration
SpringBoot 默认支持两种技术和ES交互
(1)Jest(默认不生效)
需要导入 jest的工具包:io.searchbox.client.JestClient
(2)使用SpringData ElasticSearch 操作
① 需要设置 提供了Client 客户端节点信息,需要配置 ClusterNodes、ClusterName
② 提供了 ElasticsearchTemplate 操作 ES
③ 可以使用 ElasticsearchRepository接口,可以通过这个接口对ES进行操作
三、使用 Jest 操作 ElasticSearch
1、加入依赖
<!--Jest 依赖-->
<!--与 ElasticSearch 版本要匹配-->
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>5.3.3</version>
</dependency>
2、配置 Elasticsearch 地址
默认连接的是本地的 ElasticSearch,可以在配置文件中配置指定的IP地址,如下:
# Jest 的配置信息,远程主机地址
spring.elasticsearch.jest.uris=https://192.158.1.8:9200
3、使用 JestClient 进行测试
(1)测试索引(保存)
@Autowired
JestClient jestClient;
//测试索引
@Test
public void test01() {
//1、给ES中索引(保存)一个文档
Article article = new Article();
article.setId(1);
article.setTitle("好消息");
article.setAuthor("张三");
article.setContent("Hello World!");
//2、构建一个索引功能,Builder参数为要保存的文档,index设置索引,type设置类型,还可以使用id设置id
Index index = new Index.Builder(article).index("njf").type("news").build();
try {
//3、执行
jestClient.execute(index);
} catch (IOException e) {
e.printStackTrace();
}
}
(2)测试查询
//测试搜索
@Test
public void search() {
//1、查询表达式
String json = "{\n" +
" \"query\" : {\n" +
" \"match_phrase\" : {\n" +
" \"content\" : \"hello\"\n" +
" }\n" +
" }\n" +
"}";
//2、构建所搜功能,Builder参数为查询表达式,设置索引与类型
Search search = new Search.Builder(json).addIndex("njf").addType("news").build();
//3、执行
try {
SearchResult result = jestClient.execute(search);
System.out.println(result.getJsonString());
} catch (IOException e) {
e.printStackTrace();
}
}
四、使用 SpringData Elasticsearch 操作ES
1、配置 SpringData 的信息
#SpringData ElasticSearch
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=192.158.1.8:9300
2、版本适配问题
使用 SpringData ElasticSearch可能会出现适配问题【ES版本有可能版本不合适】
版本适配说明:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference
如果版本不适配
(1)升级SpringBoot版本
(2)安装对应版本的 ES
3、操作ES
(1)使用 ElasticSearchRepository 接口
① 创建 BookElasticsearchRepository 接口
/**
* ElasticsearchRepository<T, ID extends Serializable>
* 两个泛型
* T:保存的类型
* ID:主键类型
*
*/
public interface BookRepository extends ElasticsearchRepository<Book, Integer> {
public List<Book> findByBookNameLike(String bookName);
}
② 创建Book类
//使用该注解指定 索引indexName 和类型type
@Document(indexName = "njf", type = "book")
public class Book {
private Integer id;
private String bookName;
private String author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", bookName='" + bookName + '\'' +
", author='" + author + '\'' +
'}';
}
}
③ 测试保存
@Autowired
BookRepository bookRepository;
@Test
public void test02() {
Book book = new Book();
book.setId(1);
book.setAuthor("张三");
book.setBookName("ES从入门到精通");
bookRepository.index(book);
}
④ 测试查询
@Autowired
BookRepository bookRepository;
@Test
public void test03() {
Book book = new Book();
book.setId(1);
book.setAuthor("张三");
book.setBookName("ES从入门到精通");
List<Book> books = bookRepository.findByBookNameLike("入门");
books.forEach(System.out::println);
}
(2)使用 ElasticsearchTemplate
相关参考文档:
https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference