如何使用Spring Data Elasticsearch手动创建索引?相关API有哪些?
是否可以用Spring Data Elasticsearch和Java High Level Rest Client手动创建索引
完全可以,两种依赖都提供了原生的索引操作能力,完全可以满足自定义创建索引、配置映射、管理别名等需求。
相关API参考
你梳理的索引操作相关API写法如下,注:Elasticsearch 7.x及以上版本已废弃多type机制,单索引仅支持_doc作为默认type,高版本场景下type参数可固定为_doc或直接移除:
createIndexWithCustomMappings(String indexName, String fieldMappings); createTypeWithCustomMappings(String indexName, String type, String fieldMappings); addAlias(String aliasName); fetchAlias(String aliasName); deleteIndex(String indexName); getTypeSchema(String indexName, String type);
核心实现方式
方式1:基于Spring Data Elasticsearch实现
通过ElasticsearchOperations获取IndexOperations实例即可完成全量索引操作:
- 创建索引时可以直接传入自定义的JSON格式mapping参数,无需依赖实体类注解自动生成
- 别名、删除索引、查询schema等操作都可以通过
IndexOperations的对应方法直接实现
方式2:基于Java High Level Rest Client实现
直接注入RestHighLevelClient实例后,调用indices()方法获取索引操作客户端,即可通过对应请求类完成所有索引操作,以下是创建带自定义映射索引的示例代码:
@Autowired private RestHighLevelClient restHighLevelClient; public boolean createIndexWithCustomMappings(String indexName, String fieldMappings) throws IOException { // 构造创建索引请求 CreateIndexRequest createRequest = new CreateIndexRequest(indexName); // 传入自定义字段映射配置 createRequest.mapping(fieldMappings, XContentType.JSON); // 执行请求 CreateIndexResponse response = restHighLevelClient.indices().create(createRequest, RequestOptions.DEFAULT); // 返回是否创建成功 return response.isAcknowledged(); }
其余的类型映射创建、别名管理、索引删除、schema查询等操作都可以通过对应请求类(PutMappingRequest、IndicesAliasesRequest、DeleteIndexRequest、GetMappingsRequest)实现。
注意事项
- 手动创建的索引优先级高于Spring Data Elasticsearch的实体类自动生成索引的逻辑,注意手动配置的映射和实体类注解配置不要产生冲突
- 操作索引前建议先调用索引存在校验接口,避免重复创建或删除不存在索引的报错
- 若使用ES7及以上版本,建议直接废弃type相关的方法和参数,适配官方最新的索引规范
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

