Spring Data ElasticSearch 官方文档

ElasticSearch Operations

Spring Data Elasticsearch 使用多个接口来定义针对 ES 索引调用的操作。

  • IndexOperations - 在索引级别定义操作,如创建、删除索引
  • DocumentOperations - 根据其ID存储,更新和检索实体的操作
  • SearchOperations - 查询搜索多个实体
  • ElasticsearchOperations 结合 DocumentOperationsSearchOperations

这些接口对应 ES API 的结构,默认提供:

  • 索引管理功能
  • 对域类型的读/写映射支持
  • 丰富的查询条件API
  • 资源管理和异常转换

一、ElasticsearchTemplate

ES 4.0 开始不推荐使用 ElasticsearchTemplate,这里就不做赘述了。

请改用 ElasticsearchRestTemplate。

二、ElasticsearchRestTemplate

ElasticsearchRestTemplateElasticsearchOperations 的接口实现。因此配置好 High Level REST Client 即可使用。

配置如下:

@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {

    @Bean
    @Override
    public RestHighLevelClient elasticsearchClient() {
        ClientConfiguration build = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();
        return RestClients.create(build).rest();
    }

}

三、用法示例

@RestController
@RequestMapping("/api/demo")
public class DemoController {

    private final ElasticsearchRestTemplate template;

    public DemoController(@Qualifier("elasticsearchRestTemplate") ElasticsearchRestTemplate template) {
        this.template = template;
    }

    @Getter
    @Setter
    @Document(indexName = "person")
    public static class Person {
        private String id;
        private String name;
        private Integer age;
    }

    @PostMapping("/person")
    public String save(@RequestBody Person person) {
        IndexQuery indexQuery = new IndexQueryBuilder()
                .withId(person.getId())
                .withObject(person)
                .build();
        return template.index(indexQuery);
    }

    @GetMapping("/person/{id}")
    public Person findById(@PathVariable String id) {
        return template.queryForObject(GetQuery.getById(id), Person.class);
    }
}

四、搜索结果类型

使用 DocumentOperations 接口的方法检索文档时,仅返回找到的实体。而使用 SearchOperations 的方法搜索时,会返回实体的其它信息,如实体的 score 等。

SearchHit,包含以下信息:

  • ID
  • Score,匹配度得分
  • Sort Values,排序值
  • Highlight Fields,高亮字段
  • 类型为 T 的实体

SearchHits,包含以下信息:

  • 实体总数
  • 总匹配度
  • 最高分数
  • 对象列表 SeachHit
  • 返回的聚合

SearchPage,返回一个 Page 对象,并且包含 SearchHits<T> 元素

SearchScrollHits

SearchHitsIterator,迭代器

文章作者: koral
文章链接: http://luokaiii.github.io/2020/08/18/后端/SpringDataElasticsearch/4.ES操作/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自