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

1.声明

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

2.pom依赖

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.2.5.RELEASE</version>
	<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-elasticsearch</artifactId>
	<!-- <version>3.2.6.RELEASE</version> -->
</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.测试

添加操作
在这里插入图片描述
查询操作
在这里插入图片描述修改操作
在这里插入图片描述
查看修改后的数据
在这里插入图片描述
查询所有操作
在这里插入图片描述

删除操作
在这里插入图片描述

删除后再查询操作
在这里插入图片描述

直接报错

7.总结

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

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

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤使用 Spring Boot 和 Elasticsearch 实现增删的功能: 1. 添加依赖:在你的 Spring Boot 项目的 pom.xml 文件中,添加 Elasticsearch 相关的依赖。例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置 Elasticsearch:在你的 application.properties 或 application.yml 文件中,配置 Elasticsearch 的连接信息。例如: ```yaml spring.data.elasticsearch.cluster-nodes=localhost:9200 ``` 3. 创建实体类:创建一个代表你要操作的数据的实体类,并使用注解来映射到 Elasticsearch 中的索引和类型。例如: ```java import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "your_index_name", type = "your_type_name") public class YourEntity { @Id private String id; private String name; // 其他属性和方法 } ``` 4. 创建数据访问接口:创建一个继承自 ElasticsearchRepository 的数据访问接口,该接口提供了一些基本的 CRUD 方法。例如: ```java import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface YourEntityRepository extends ElasticsearchRepository<YourEntity, String> { // 可以根据需要添加自定义的询方法 } ``` 5. 编写业务逻辑:在你的服务类中使用 YourEntityRepository 来进行相关的数据操作。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class YourService { @Autowired private YourEntityRepository repository; public YourEntity save(YourEntity entity) { return repository.save(entity); } public void delete(String id) { repository.deleteById(id); } public Iterable<YourEntity> findAll() { return repository.findAll(); } // 可以根据需要添加其他的询方法和业务逻辑 } ``` 这样,你就可以通过调用 YourService 中的方法来实现对 Elasticsearch增删操作了。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值