原标题:Spring认证中国教育管理中心-SpringDataElasticsearch教程二(Spring中国教育管理中心)SpringDataElasticsearch教程二6.1.2。映射规则类型提示映射允许使用发送到服务器的文档中嵌入的类型提示进行通用类型映射。这些类型提示在文档中表示为属性,并为每个聚合根编写。示例56.类型提示publicclassPerson{@IdStringid;字符串名字;Stringlastname;}{"_class":"com.example.Person","id":"cb7bef","firstname":"Sarah","lastname":"Connor"}默认情况下,域类型类名是用于类型提示。可以配置类型提示以保存自定义信息。使用@TypeAlias注解来做到这一点。确保在初始实体集(AbstractElasticsearchConfiguration#getInitialEntitySet)中添加@TypeAlias类型,以便您在第一次从存储中读取数据时已经拥有可用的实体信息。示例57.使用别名@TypeAlias("human")进行类型提示publicclassPerson{@IdStringid;//...}{"_class":"human","id":...}使用配置的别名写入实体。除非属性类型是Object、接口或实际值类型与属性声明不匹配,否则不会为嵌套对象编写类型提示。禁用类型提示当应该使用的索引已经存在且其映射中没有定义类型提示并且映射模式设置为严格时,可能需要禁用类型提示的写入。在这种情况下,写入类型提示会产生错误,因为无法自动添加该字段。通过覆盖派生自AbstractElasticsearchConfiguration的配置类中的writeTypeHints()方法,可以为整个应用程序禁用类型提示(请参阅Elasticsearch客户端)。作为替代方案,可以使用@Document注释为单个索引禁用它们:@Document(indexName="index",writeTypeHint=WriteTypeHint.FALSE)我们强烈建议不要禁用类型提示。只有在被迫时才这样做。在多态数据或文档检索可能完全失败的情况下,禁用类型提示可能会阻止从Elasticsearch正确检索文档。地理空间类型Point&GeoPoint等地理空间类型被转换为纬度/经度对。示例58.地理空间类型publicclassAddress{Stringcity,street;Pointlocation;}{"city":"LosAngeles","street":"2800EastObservatoryRoad","location":{"lat":34.118347,"lon":-118.3026284}}GeoJsontypeSpringDataElasticsearch支持GeoJson类型,通过为不同的GeoJson几何图形提供接口和实现。它们根据GeoJson规范映射到Elasticsearch文档。在indexmap中指定entity对应的属性,就像写indexmap时的geo_shape一样。(另请参阅Elasticsearch文档)示例59.GeoJson类型publicclassAddress{Stringcity,street;GeoJsonPointlocation;}{"city":"LosAngeles","street":"2800EastObservatoryRoad","location":{"type":"Point","coordinates":[-118.3026284,34.118347]}}实现以下GeoJson类型:GeoJsonPointGeoJsonMultiPointGeoJsonLineStringGeoJsonMultiLineStringGeoJsonPolygonGeoJsonMultiPolygonGeoJsonGeometryCollectionCollections应用与集合映射规则中的值相同的类型聚合提示和自定义转换。示例60.集合publicclassPerson{//...Listfriends;}{//..."friends":[{"firstname":"Kyle","lastname":"Reese"}]}Maps对于Maps中的值,在类型提示和自定义转换方面应用与聚合根相同的映射规则。但是,映射键需要一个字符串才能由Elasticsearch处理。示例61.集合publicclassPerson{//...MapknownLocations;}{//..."knownLocations":{"arrivedAt":{"city":"LosAngeles","street":"2800天文台东道","location":{"lat":34.118347,"lon":-118.3026284}}}}6.1.3.自定义转换查看上一节中的配置ElasticsearchCustomConversions允许注册映射域和简单的特定于类型的规则。示例62.元模型对图像射击配置@ConfigurationpublicclassConfigextendsAbstractElasticsearchConfiguration{@OverridepublicRestHighLevelClientelasticsearchClient(){returnRestClients.create(ClientConfiguration.create("localhost:9200")).rest();}@Bean@OverridepublicElasticsearchCustomConversionselasticsearchCustomConversions(){返回新的ElasticsearchCustomConversions(Arrays.asList(newAddressToMap(),newMapToAddress()));}@WritingConverter静态类AddressToMap实现Converter>{@OverridepublicMapconvert(Addresssource){LinkedHashMaptarget=newLinkedHashMap<>();target.put("ciudad",source.getCity());//...返回目标;}}@ReadingConverter静态类MapToAddress实现Converter