springboot 集成 spring-data-elasticsearch
版本对照
各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/
1、在application.yml中添加配置
1 2 3 4 5 6 7 8 | spring: data: elasticsearch: repositories: enabled: true #多实例集群扩展时需要配置以下两个参数 #cluster-name: datab-search #cluster-nodes: 127.0 . 0.1 : 9300 , 127.0 . 0.1 : 9301 |
2、添加 Maven 依赖
1 2 3 4 5 | <!---开箱即用,版本默认和springboot版本对应--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> |
3、建立实体entity
注解说明:
Spring Data通过注解来声明字段的映射属性,有下面的三个注解:
@Document 作用在类,标记实体类为文档对象,一般有两个属性
indexName:对应索引库名称
type:对应在索引库中的类型
shards:分片数量,默认5
replicas:副本数量,默认1
@Id 作用在成员变量,标记一个字段作为id主键
@Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
text:存储数据时候,会自动分词,并生成索引
keyword:存储数据时候,不会分词建立索引
Numerical:数值类型,分两类
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float
需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
Date:日期类型
elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
index:是否索引,布尔类型,默认是true
store:是否存储,布尔类型,默认是false
analyzer:分词器名称,这里的ik_max_word即使用ik分词器
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @Document (indexName = "cp_doc" , type = "doc" , shards = 10 , replicas = 0 ) public class CpDocument extends BaseEntity { @Id //作用在成员变量,标记一个字段作为id主键 private long id ; @Field (type = FieldType.Text) private String name ; @Field (type = FieldType.Text) private String address ; public long getId() { return id; } public void setId( long id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getAddress() { return address; } public void setAddress(String address) { this .address = address; } |
4、编写 Repository 访问层
1 2 3 4 5 6 7 | /** * 基本操作repository-curd * @author 滚动的蛋 * */ public interface CpRepository extends ElasticsearchRepository<CpDocument, Integer> { } |
5、创建索引+查询示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | @RunWith (SpringRunner. class ) @SpringBootTest public class ElasticSearchTest { @Autowired CpRepository cpRepository; @Autowired ElasticsearchTemplate elsTemplate; //ElasticsearchTemplate中提供了创建索引的API<br><br> @Test public void addIndexTest() { //创建索引 boolean indexRes = elsTemplate.createIndex(CpDocument. class ); System.out.println( "======创建索引结果:" +indexRes+ "=========" ); //添加索引 CpDocument cpTest = new CpDocument(); cpTest.setId( 1 ); cpTest.setName( "阿里巴巴" ); cpTest.setAddress( "北京路12号" ); cpRepository.save(cpTest); } @Test public void srarchTest() { //这个只做一个多字段的匹配查询示例,其它的可以查看API文档使用 //"name","address" 为匹配的字段 MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery( "阿里巴巴" , "address" , "name" ); //多字段匹配QueryBuilder SearchQuery searchQuery = new NativeSearchQueryBuilder() //构建查询对象 .withQuery(multiMatchQuery) .withIndices( "cp_doc" ) //索引名 .withPageable(PageRequest.of( 0 , 10 )) //分页 .build(); Iterable<CpDocument> productDtos = cpRepository.search(searchQuery); ArrayList<CpDocument> CpDocuments = Lists.newArrayList(productDtos); for (CpDocument cpDocument : CpDocuments) { System.out.printf( "企业名称:%s,企业地址:%s\n" ,cpDocument.getName(),cpDocument.getAddress()); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通