企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、概述 ### **原生API的缺点** 需要自己把对象序列化为json存储; 查询到结果也需要自己反序列化为对象; Spring Data Elasticsearch是Spring Data项目下的一个子模块,提供了Spring Data的统一编程模型,简化了应用的开发;因此,平台中,我们与Elasticsearch的交互基于Spring Data Elasticsearch的api; >[danger] Spring Data 的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率; ## 二、定义对象 将document映射为Java对象定义; #### **类定义级别注解:** @Document: indexName属性,指定存储数据的索引; #### **字段定义级别注解:** @Id:用来注解身份识别的字段; @Field:name属性,指定Elasticsearch Document的字段名称,如果不设定,就使用java的字段名了; type属性,字段的类型,需要注意字符串类型字段,包括了keyword和text两种,keyword类型的字段不进行分词,是完全匹配,而text类型字段,则是进行分词,当某个字段需要完整匹配不做分词的时候,则定义为keyword,如果都需要,那简单,直接定义两个字段,分别定义为text和keywrod即可; store属性,是否存储在Elasticsearch,默认是false; analyzer,指定分词器名称; searchAnalyzer,搜索分词器名称; normalizer,用在keyword中,基本等同于analyzer; ## 三、操作 通过Spring Data Elasticsearch与Elasticsearch进行互操作,主要有两种方式,一种是 Elasticsearch Repositories接口,另一种是Elasticsearch Operations接口; ### **Elasticsearch Repositories** 这套接口,是Spring Data实现的一套接口,类似JPA机制运行,包括定义对象,操作对象(CRUD); >[danger] 平台推荐用这套接口实现数据的维护增加、修改及删除,以及简单的查询,但对于复杂的查询,建议使用Elasticsearch Operations(SearchOperations); ### **ElasticsearchRestTemplate(Elasticsearch Operations)** 相对于Elasticsearch Repositories接口,当ElasticsearchRestTemplate接口更加底层,它符合[Elasticsearch API](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)规范; 该接口包含了以下几类子接口,分别承担不同的任务; * `IndexOperations` 索引级的操作,如索引的增加、删除等. * `DocumentOperations` 文档级操作,如新增、删除等; * `SearchOperations` 专门的检索操作接口; * `ElasticsearchOperations` 组合了DocumentOperations和SearchOperations两个接口,提供了IndexOperations接口的引用; 增加索引: ``` IndexQuery indexQuery = new IndexQueryBuilder() .withId(person.getId().toString()) .withObject(person) .build(); String documentId = elasticsearchOperations.index(indexQuery); ``` 查询索引: ``` Person person = elasticsearchOperations .queryForObject(GetQuery.getById(id.toString()), Person.class); ```