原标题:Spring认证中国教育管理中心-Spring Data Elasticsearch教程二(Spring中国教育管理中心)

6.1.2.映射规则
类型提示
映射使用嵌入在发送到服务器的文档中的类型提示来允许泛型类型映射。这些类型提示_class在文档中表示为属性,并为每个聚合根写入。
示例 56. 类型提示
public class Person {
@Id String id;
String firstname;
String lastname;
}
{
"_class" : "com.example.Person",
"id" : "cb7bef",
"firstname" : "Sarah",
"lastname" : "Connor"
}
默认情况下,域类型类名用于类型提示。
类型提示可以配置为保存自定义信息。使用@TypeAlias注释来执行此操作。
确保@TypeAlias在初始实体集 (
AbstractElasticsearchConfiguration#getInitialEntitySet) 中添加类型,以便在首次从存储中读取数据时已经拥有可用的实体信息。
示例 57. 带别名的类型提示
@TypeAlias("human")
public class Person {
@Id String id;
// ...
}
{
"_class" : "human",
"id" : ...
}
写入实体时使用配置的别名。
除非属性类型是Object、接口或实际值类型与属性声明不匹配,否则不会为嵌套对象编写类型提示。
禁用类型提示
当应该使用的索引已经存在而没有在其映射中定义类型提示并且映射模式设置为严格时,可能需要禁用类型提示的写入。在这种情况下,写入类型提示会产生错误,因为该字段无法自动添加。
通过覆盖writeTypeHints()派生自的配置类中的方法,可以为整个应用程序禁用类型提示
AbstractElasticsearchConfiguration(请参阅Elasticsearch 客户端)。
作为替代方案,可以使用@Document注释为单个索引禁用它们:
@Document(indexName = "index", writeTypeHint = WriteTypeHint.FALSE)
我们强烈建议不要禁用类型提示。只有在被迫时才这样做。禁用类型提示可能会导致无法从 Elasticsearch 正确检索文档,以防多态数据或文档检索可能完全失败。
地理空间类型
像Point&这样的地理空间类型GeoPoint被转换为纬度/经度对。
示例 58. 地理空间类型
public class Address {
String city, street;
Point location;
}
{
"city" : "Los Angeles",
"street" : "2800 East Observatory Road",
"location" : { "lat" : 34.118347, "lon" : -118.3026284 }
}
GeoJson 类型
Spring Data Elasticsearch 通过为GeoJson不同几何提供接口和实现来支持 GeoJson 类型。它们根据 GeoJson 规范映射到 Elasticsearch 文档。实体的相应属性在索引映射中指定,就像geo_shape编写索引映射时一样。(也请查看Elasticsearch 文档)
示例 59. GeoJson 类型
public class Address {
String city, street;
GeoJsonPoint location;
}
{
"city": "Los Angeles",
"street": "2800 East Observatory Road",
"location": {
"type": "Point",
"coordinates": [-118.3026284, 34.118347]
}
}
实现了以下 GeoJson 类型:
- GeoJsonPoint
- GeoJsonMulti

本文是Spring Data Elasticsearch教程的第二部分,主要讲解了映射规则,包括类型提示、禁用类型提示和地理空间类型。此外,还介绍了自定义转化以及Elasticsearch的操作,如ElasticsearchTemplate和反应式ElasticsearchOperations的使用。
最低0.47元/天 解锁文章
584

被折叠的 条评论
为什么被折叠?



