本文已参与「新人创作礼」活动,一起开启掘金创作之路。
近期在工作中需要使用es进行简单的全文检索,所以最近都在边学边做笔记,也会把自己遇到的bug以及如何解决的,一并记录在这里,供大家学习参考。
SpringBoot整合ElasticSearch
1、创建工程
点击next即可新建成功!!!
2、导入依赖
依赖版本和安装的版本一致
<!-- elasticsearch的客户端 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>${elasticsearch-data.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>4.3.4</version>
</dependency>
<java.version>1.8</java.version>
<!-- 统一版本 -->
<elasticsearch.version>7.6.1</elasticsearch.version>
<elasticsearch-data.version>2.6.7</elasticsearch-data.version>
3、编写实体类
@Document(indexName = "test_user1")//指定索引名称
public class User implements Serializable {
@Id
private int id;
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
4、测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
//创建索引
@Test
public void createIndex(){
// 指定文档的数据实体类
IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(User.class);
// 创建索引
indexOperations.create();
// 创建字段映射
Document mapping = indexOperations.createMapping();
// 给索引设置字段映射
indexOperations.putMapping(mapping);
}
//添加数据
@Test
public void insertUser(){
List<User> users = new ArrayList<>();
users.add(new User(1,"zhangsan",2));
users.add(new User(2,"lisi",3));
users.add(new User(3,"wangwu",14));
List indexQueryList = new ArrayList<>();
users.forEach(user -> {
IndexQuery indexQuery = new IndexQuery();
indexQuery.setObject(user);
indexQueryList.add(indexQuery);
});
elasticsearchRestTemplate.bulkIndex(indexQueryList, IndexCoordinates.of("test_user1"));
}
//删除索引
@Test
void delete(){
boolean delete = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("test_user1")).delete();
System.out.println(delete);
}
}
查询索引信息
@Test
void search(){
NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();
SearchHits<User> hits = elasticsearchRestTemplate.search(query.build(),User.class);
for (SearchHit<User> user:hits) {
System.out.println(user.getContent().toString());
}
}
输出信息