Spring Boot整合ElasticSearch实战 - 第511篇

计500+Spring BootSpring BootSpring BootSpring BootSpring Boot

Spring Boot

Spring Boot

日赚800,利用淘宝/闲鱼进行AI音乐售卖实操 - 第506篇

如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 - 第507篇

ES全文检索[ES系列] - 第508篇

ES 深度分页问题及针对不同需求下的解决方案[ES系列] - 第509篇

抖音主播/电商人员有福了,利用Suno创作产品宣传,让产品动起来-小米Su7 - 第510篇



最近体验了下AI生成音乐,感觉效果很不错,有兴趣的可以访问如下地址体验一下:

https://suno3.cn/#/?i=8NCBS8_WXTT




Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

这一节来看下在SpringBoot中如何集成ElasticSearch


一、Spring Boot整合ElasticSearch

这里有一个版本的对应情况,最好对应上会比较好,不然会出现莫名其妙的问题。

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#new-features.5-1-0


1.1 创建项目

根据相应的版本,选择相应的Spring Boot版本,这里选择的是3.1.4版本。

1.2 添加依赖

pom.xml文件添加依赖:

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>


1.3 添加配置

在配置文件application.properties中添加配置:

spring.elasticsearch.uris = http://localhost:9200spring.elasticsearch.connection-timeout = 3s


1.4 创建实体

创建实体,使用@Field注解,添加字段在ES中的类型以及使用的分词器:

@Data@AllArgsConstructor@Document(indexName = "employees")public class Employee {    @Id    private Long id;    @Field(type= FieldType.Keyword)    private String name;    private int sex;    private int age;    @Field(type= FieldType.Text,analyzer="ik_max_word")    private String address;    private String remark;}

1.5实现ElasticsearchRepository

该接口是框架封装的用于操作Elastsearch的高级接口:

@Repositorypublic interface EmployeeRepository extends ElasticsearchRepository<Employee, Long> {    List<Employee> findByName(String name);}

1.6测试

@AutowiredEmployeeRepository employeeRepository;
@Testvoid test() { Employee employee = new Employee(1L,"悟纤",1,32,"福建福州","love coding"); //插入文档 employeeRepository.save(employee);
//根据id查询 Optional<Employee> result = employeeRepository.findById(1L); System.out.println(String.valueOf(result.get()));
//根据name查询 List<Employee> list = employeeRepository.findByName("悟纤"); System.out.println(list.get(0));}

1.7使用ElasticsearchTemplate

@Resourceprivate ElasticsearchTemplate elasticsearchTemplate;
@Testpublic void testCreateIndex(){ //创建索引 IndexOperations indexOperations = elasticsearchTemplate.indexOps(IndexCoordinates.of("employee_index")); if (indexOperations.exists()) { System.out.println("索引已经存在"); }else { //创建索引 indexOperations.create(); }}@Testpublic void testDeleteIndex(){ //删除索引 IndexOperations indexOperations = elasticsearchTemplate.indexOps(IndexCoordinates.of("employee_index")); indexOperations.delete();}
@Testpublic void testQueryDocument(){ NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder(); //查询 //builder.withQuery(QueryBuilders.matchQuery("address","公园")); // 设置分页信息 builder.withPageable(PageRequest.of(0, 5)); // 设置排序 //builder.withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC));
SearchHits<Employee> search = elasticsearchTemplate.search(builder.build(), Employee.class); List<SearchHit<Employee>> searchHits = search.getSearchHits(); for (SearchHit hit: searchHits){ System.out.println("返回结果:"+hit.toString()); }
}

@Testpublic void testInsertBatch() throws JsonProcessingException { List<Employee> employees = new ArrayList<>(); employees.add(new Employee(2l,"张三",1,25,"广州天河公园","java developer")); employees.add(new Employee(3l,"李四",1,28,"广州荔湾大厦","java assistant")); employees.add(new Employee(4l,"小红",0,26,"广州白云山公园","php developer"));
List<IndexQuery> queries = new ArrayList<>(); for (Employee employee : employees) { IndexQuery indexQuery = new IndexQuery(); indexQuery.setId(employee.getId().toString());
ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(employee); indexQuery.setSource(json); queries.add(indexQuery); } //bulk批量插入 elasticsearchTemplate.bulkIndex(queries,Employee.class);}

基本的集成用起来害死很简单的,关键在如何在实际的项目中进行合理的使用,这个是需要在具体的实战中进行自我摸索和探究的。




相关推荐

  • 从明天起,做一个 Rust 程序员
  • springboot第71集:字节跳动全栈一面经,一文让你走出微服务迷雾架构周刊
  • MQ消息积压,把我整吐血了
  • 3 个好玩的前端开源项目「GitHub 热点速览」
  • Spring Security 如何防止 XSS 攻击
  • 面试官:数据库 delete 表数据,磁盘空间还是被一直占用,为什么?
  • 面试官:宕机了,Redis 如何避免数据丢失?
  • 领导如何看待不争不抢的员工?
  • 有些老年痴呆​30到40岁就有苗头了......
  • Altman首提GPT-7设想:每个人都可以访问其计算资源!
  • OpenAI模型终于更新!强大视听能力的GPT-4o将面向所有用户,其前身正是神秘的gpt2!
  • 思维链不存在了?纽约大学最新研究:推理步骤可「省略」
  • MIT等惊人发现:全世界AI已学会欺骗人类!背刺人类盟友,佯攻击败99.8%玩家
  • GPT-4调教指令揭秘,OpenAI又「Open」了一回!网友在线追问GPT-5
  • OpenAI一夜改写历史,GPT-4o干翻所有语音助手!丝滑如真人引爆全网科幻成真
  • 西浦、利物浦大学提出:点云数据增强首个全面综述
  • 微软让MoE长出多个头,大幅提升专家激活率
  • 零一万物Yi-1.5来了,国产开源大模型排行榜再次刷新
  • 我是如何赢得GPT-4提示工程大赛冠军的
  • OpenAI颠覆世界:GPT-4o完全免费,实时语音视频交互震撼全场,直接进入科幻时代