SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)

1.声明

当前内容用于本人学习和使用SpringDataElasticsearch操作Elasticsearch,主要是一些简单的增删改操作(Elasticsearch的版本为7.4.0)

2.pom依赖

<parent>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-parentartifactId>
	<version>2.2.5.RELEASEversion>
	<relativePath /> 
parent>
<dependency>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
	<groupId>org.projectlombokgroupId>
	<artifactId>lombokartifactId>
dependency>
<dependency>
	<groupId>org.springframework.datagroupId>
	<artifactId>spring-data-elasticsearchartifactId>
	
dependency>

3.创建基本的配置类(ElasticsearchConfig)

@Configuration
public class ElasticsearchConfig {
     

	@Bean
	TransportClientFactoryBean client() {
     
		TransportClientFactoryBean bean=new TransportClientFactoryBean();
		bean.setClusterNodes("192.168.126.130:9300");
		return bean;
	}

}

1.这里就是一个非常简单的配置类,但是这个是根据报错信息得到的SpringData需要的类,所以我们改写即可,但是需要注意的是当前的端口不是9200而是9300(本人表示不理解),第一个坑

2.如果出现提示当前的index已存在,则需要删除掉才能重新启用(好像只能重复使用SpringData创建的索引,已存在的Index是会报错的),这是第二个坑

4.创建实体类

@Document(indexName = "test",type = "person")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
     
	@Id
	private Integer id;
	private String user;
	private String title;
	private String desc;
}

注意当前的实体类中需要使用@Document并指定index和type,否则会报错的

5.创建Repository和controller层以及入口类

Repository接口

@Repository
public interface PersonRepository extends CrudRepository<Person, Integer>{
     

}

controller层

/**
 * 
 * @author hy
 *
 */
@RestController
public class PersonController {
     

	@Autowired
	PersonRepository personRepository;

	@RequestMapping("/selectAll")
	public Object selectAll() {
     
		Iterable<Person> findAll = personRepository.findAll();
		return findAll;
	}

	@RequestMapping("/selectById/{id}")
	public Person selectById(@PathVariable("id") Integer id) {
     
		Optional<Person> findById = personRepository.findById(id);
		return findById.get();
	}

	@RequestMapping("/insert")
	public String insert(Person person) {
     
		Person save = personRepository.save(person);
		return "添加成功,当前添加后数据的id为:" + save.getId();
	}

	@RequestMapping("/update")
	public String update(Person person) {
     
		Optional<Person> findById = personRepository.findById(person.getId());
		Person updatePerson = findById.get();
		if (updatePerson != null) {
     
			updatePerson.setDesc(person.getDesc());
			updatePerson.setTitle(person.getTitle());
			updatePerson.setUser(person.getUser());
			personRepository.save(person);
			return "当前修改的id为:" + person.getId() + ";成功!";
		}
		return "当前修改的id为:" + person.getId() + ";不存在!";
	}

	@RequestMapping("/deleteById/{id}")
	public String deleteById(@PathVariable("id") Integer id) {
     
		try {
     
			personRepository.deleteById(id);
			return "删除id为:" + id + "的数据成功!";
		} catch (Exception e) {
     
			return "当前删除的id为:" + id + "的数据不存在";
		}

	}
}

启动入口类

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = {
     "org.Elasticsearch.SpringData.repository"})
@EntityScan(basePackages = {
     "org.Elasticsearch.SpringData.entity"})
public class SpringDataElasticsearchApplication {
     
	public static void main(String[] args) {
     
		SpringApplication.run(SpringDataElasticsearchApplication.class, args);
	}
}

这里需要启动@EnableElasticsearchRepositories和@EntityScan,这是标准的SpringData操作

6.测试

添加操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第1张图片
查询操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第2张图片修改操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第3张图片
查看修改后的数据
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第4张图片
查询所有操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第5张图片

删除操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第6张图片

删除后再查询操作
SpringBoot之使用SpringData操作Elasticsearch(基本的增删改查)_第7张图片

直接报错

7.总结

1.在SpringData中操作Elasticsearch的时候一定要注意,当前的端口一定是9300不是9200,本人就是犯了这个错误导致一直连接不上

2.配置的时候直接使用TransportClientFactoryBean这个类即可

3.注意实体类的Index不能出现已在Elasticsearch中存在,必须由SpringData创建,否则报错

4.使用SpringData可以简化对Elasticsearch的操作,但是需要注意查询一个不存在的id的时候就会报错

以上纯属个人见解,如有问题请联系本人!

你可能感兴趣的:(Elasticsearch,SpringBoot)