Spring Data访问Elasticsearch----Elasticsearch操作
- 一、用法示例
- 二、搜索结果类型
- 三、查询
- 3.1 CriteriaQuery
- 3.2 StringQuery
- 3.3 NativeQuery
- 3.4 SearchTemplateQuery
Spring Data Elasticsearch使用多个接口来定义可以针对Elasticsearch索引调用的操作(有关响应(reactive)接口的描述,请参阅 Reactive Elasticsearch操作)。
- IndexOperations 定义索引级别的操作,如创建或删除索引。
- DocumentOperations 定义了基于实体id存储、更新和检索实体的操作。
- SearchOperations 定义使用查询搜索多个实体的操作
- ElasticsearchOperations 结合了DocumentOperations和SearchOperations接口。
这些接口对应于Elasticsearch API的结构。
接口的默认实现提供:
- 索引管理功能。
- 对域类型的读/写映射支持。
- 一个丰富的查询和条件api。
- 资源管理和异常翻译。
索引管理以及索引和映射的自动创建
IndexOperations接口和提供的实现可以从ElasticsearchOperations实例中获得,例如通过调用operations.indexOps(clazz),用户可以在Elasticsearch集群中创建索引、放置映射或存储模板和别名信息。将要创建的索引的详细信息可以使用@Setting注解进行设置,有关详细信息,请参阅索引设置。
这些操作都不是由IndexOperations或ElasticsearchOperations的实现自动完成的。调用这些方法是用户的责任。
使用Spring Data Elasticsearch存储库时,支持自动创建索引和编写映射,请参阅使用相应映射自动创建索引
一、用法示例
这个例子展示了如何在Spring REST控制器中使用注入的ElasticsearchOperations实例。这个例子假设Person是一个带有@Document、@Id等注解的类(参见映射注解概述)。
例1:ElasticsearchOperations用法
@RestController
@RequestMapping("/")
public class TestController {private ElasticsearchOperations elasticsearchOperations;public TestController(ElasticsearchOperations elasticsearchOperations) { --------1this.elasticsearchOperations = elasticsearchOperations;}@PostMapping("/person")public String save(@RequestBody Person person) { --------2Person savedEntity = elasticsearchOperations.save(person);return savedEntity.getId();}@GetMapping("/person/{id}")public Person findById(@PathVariable("id") Long id) { --------3Person person = elasticsearchOperations.get(id.toString(), Person.class);return person;}
}1. 让Spring在构造函数中注入提供的ElasticsearchOperationsbean。
2. 在Elasticsearch集群中存储一些实体。id是从返回的实体中读取的,因为它在person对象中可能为null,并且是由Elasticsearch创建的。
3. 检索具有获取id的实体。