Spring Data ElasticSearch 官方文档

ElasticSearch Object Mapping

从 ES 4.0 开始,移除了 Jackson 的 ObjectMapper,改用 MappingElasticsearchConverter

一、模型对象映射

1.1 映射注解

MappingElasticsearchConverter 使用注释来标注实体与属性。

  • @Document - 类标注,指示该类是映射到数据库的对象
    • indexName:存储的索引名称
    • type:映射类型(从4.0开始)
    • shards:索引的分片数
    • replicas:索引的副本数
    • refreshIntervall:索引的刷新间隔,默认1s
    • indexStoreType:索引的存储类型,默认 fs
    • createIndex:是否创建索引,默认为 true
    • versionType:版本管理,默认为 EXTERNAL
  • @Id - 字段标记,用于标识唯一字段
  • @Transient - 默认情况下,存储或检索文档时,所有字段都映射到文档,此注释不包括该字段
  • @PersistenceConstructor - 指定从数据库实例化对象时要使用的给定构造函数
  • @Field - 定义属性映射
    • name:字段名称,如果不写,则为 java 的属性名。
    • type:字段的类型,可选值:Text, Keyword, Long, Integer, Short, Byte, Double, Float, Half_Float, Scaled_Float, Date, Date_Nanos, Boolean, Binary, Integer_Range, Float_Range, Long_Range, Double_Range, Ip_Range, Object, Nested, Ip, TokenCount, Percolator, Flattened, Search_As_You_Type等,详见
    • format:和日期的 pattern 类似
    • store:是否将原始字段值保存在ES中,默认为false
    • analyzersearchAnalyzernormalizer 用于指定自定义分析
  • @GeoPoint - 将字段标记为 geo_point 类型

二、映射规则

类型提示:字段为 _class,允许通用类型映射,可使用 @TypeAlias 来指定别名。

地理空间类型:如 PointGeoPoint 类型,会转换为 经纬度对。

集合:转换为数组。

Map:键必须为字符串。

三、自定义类型转换

AbstractElasticsearchConfiguration 中,可以通过 ElasticsearchCustomConversions 来注册类型转换规则。

@Configuration
public class Config extends AbstractElasticsearchConfiguration {

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

  @Bean
  @Override
  public ElasticsearchCustomConversions elasticsearchCustomConversions() {
    return new ElasticsearchCustomConversions(
      Arrays.asList(new AddressToMap(), new MapToAddress()));       
  }

  @WritingConverter                                                 
  static class AddressToMap implements Converter<Address, Map<String, Object>> {

    @Override
    public Map<String, Object> convert(Address source) {

      LinkedHashMap<String, Object> target = new LinkedHashMap<>();
      target.put("ciudad", source.getCity());
      // ...

      return target;
    }
  }

  @ReadingConverter                                                 
  static class MapToAddress implements Converter<Map<String, Object>, Address> {

    @Override
    public Address convert(Map<String, Object> source) {

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