使用 Elastic Search 高级休息客户端获取类型映射

Get Mappings for type with Elastic Search high level rest client

我已将 Elastic 搜索从“2.3.4”升级到“7.10.0”。我想升级现有的获取特定索引和类型映射的代码。请参考下面的代码(旧的和新的)。

旧代码(2.3.4):

Map<String, Object> mappingMeta = client.admin().indices().prepareGetMappings("index1").get().mappings().get("index1").get("type1").getSourceAsMap();

新代码(7.10.0):

GetMappingsRequest mappingsRequest = new GetMappingsRequest();
mappingsRequest.indices("index1");
GetMappingsResponse mappingsResponse = client.indices().getMapping(mappingsRequest, RequestOptions.DEFAULT);
Map<String, Object> mappingMeta = mappingsResponse.mappings().get("index1").getSourceAsMap();

在新的代码更改中,我只能获取索引的映射。如何在 ES 7.10.0 中获取类型(旧代码中的“type1”)的映射?

经过一些研发发现,我们可以在 ES 7.x 版本中获取索引的字段映射,但不能获取类型,因为类型在 7.0 中的 API 中已弃用。

ES(6.7之前)GetMapping For Index and Type:

ImmutableOpenMap<String, ImmutableOpenMap<String, MappingMetaData>> allMappings = getMappingResponse.mappings();
MappingMetaData typeMapping = allMappings.get("index_name").get("type_name");
Map<String, Object> mapping = typeMapping.sourceAsMap();

ES 7.x GetMapping 仅用于索引:

Map<String, MappingMetadata> allMappings = getMappingResponse.mappings();
MappingMetadata indexMapping = allMappings.get("index_name");
Map<String, Object> mapping = indexMapping.sourceAsMap();