欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Elasticsearch的Mapping

Elasticsearch的Mapping

2025/3/18 4:28:53 来源:https://blog.csdn.net/qq_43676797/article/details/140073297  浏览:    关键词:Elasticsearch的Mapping

Elasticsearch的Mapping

Mapping是什么

  1. Mapping定义了ES的索引结构、字段类型、分词器等,是索引的一部分。
  2. 类似于关系型数据库中“表结构”的概念,在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性

查看索引Mapping

  1. 查看索引完整mapping: get /my_index/_mappings
  2. 查看索引指定字段的mapping: get /my_index/_mappings/field/xxx

字段数据类型(常用)

  1. 数字类型:long、integer、short、byte、double、float
  2. 基本数据类型:boolean、alias
  3. keywords类型:
  4. keyword:用于索引结构化字段,可用于过滤、排序、聚合,keyword类型只能通过精确值搜索到,比如ID、姓名等
  5. wildcrd:可以针对类似grep的,用于模糊查询
  6. 时间类型:date、data_nanos
  7. 对象类型:
  8. object:非基本类型之外,默认的json对象为Object
  9. flattened:单映射对象类型、其值为json对象
  10. nested:嵌套类型
  11. join:父子关系类型
  12. 空间数据类型:
  13. geo_point:空间中的点,比如经纬度
  14. geo_shape:复杂型状,比如多边形
  15. 文本搜索类型:
  16. text:文本类型,适用于全文检索
  17. completion:用于自动补全,即搜索推荐

映射类型(两种)

自动映射-Dynamic Field Mapping(不推荐使用)

es在增加数据的时候如果没有指定字段的类型,es会自动分配类型

  1. 如果是true或false默认boolean
  2. 如果是小数默认float
  3. 如果是数字默认long
  4. 如果是object默认object
  5. 如果数组取决于数组中第一个非空元素类型
  6. 如果是日期格式字符串默认date
  7. 如果是数字类型字符串默认float或long
  8. 如果其它字符串默认text+keyword
显示映射-Expllcit Field Mapping

在创建Mapping时候,手动创建类型

例子:

PUT my_index
{"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"}}}
}

映射参数

映射参数就是在创建索引时候的mapping中可以配置什么参数,分别代表什么含义

  1. index:表示对当前自动创建倒排索引,默认true,如果不创建索引,则不可以通过当前字段作为搜索条件
  2. analyzer:指定分词器,只可以对可以分词的字段类型使用
  3. boots:对当前字段相关度评分权重,默认1
  4. coerce:是否允许强制类型转换
  5. copy_to:用于将其它字段拼接后存储到当前字段中
  6. doc_value:默认为true,可以提高排序和聚合的效率
  7. dynamic:控制是否可以动态添加新的字段
  8. strict:如果检测到新字段,会引发异常并拒绝文档,必须将新字段显示的添加到mapping中
  9. eager_global_ordinals:用于聚合字段,提示聚合性能,
  10. enabled:是否创建倒排索引,可以作用于mapping也可以作用于field上
  11. fielddata:查询时内存数据结构,在内存中存储,设置字段为filedata会给该字段创建倒排索引并放到内存中。
  12. field:当前字段的子字段
  13. format:定义日期格式
  14. ignore_above:超过长度的内容被忽略,不被存储
  15. ignore_malformed:忽略类型错误
  16. index_phrases:提升exact_value查询速度
  17. index_prefixes:前缀检索,有两个属性
  18. min_chars:前缀最小长度,默认2
  19. max_chars:前缀最大长度,默认5最大20
  20. meta:添加元数据
  21. norms:是否禁用评分
  22. null_value:为空值赋值默认值
  23. properties:在mapping中可以配置字段的属性
  24. search_analyzer:设置单独的查询分析器,默认和analyzer一致,如果两者都没设置默认为”standard"。analyzer针对元数据,search_analyzer针对搜索的内容。
  25. similarity:为字段设置相关度算法
  26. store:设置字段是否创建索引
  27. term_vector:运维参数

映射模板

映射模板用来解决不确定的类型或字段名索引的创建,可以理解为批量处理索引的mapping

例子:给user索引创建两个模板,第一个模板将long类型的属性默认转换为integer类型,第二个模板将以sum_开头的字段且不以_text结尾的字段且为String类型的字段转换为keyword类型

put user3
{"mappings":{"dynamic_templates":[{"long-to-integer":{"match_mapping_type": "long","mapping":{"type": "integer"}}},{"num_and_string":{"match_mapping_type":"string","match":"num_*","unmatch":"*_text","mapping":{"type":"keyword"}}}]}
}

查看索引

{"user3": {"mappings": {"dynamic_templates": [{"long-to-integer": {"match_mapping_type": "long","mapping": {"type": "integer"}}},{"num_and_string": {"match": "num_*","unmatch": "*_text","match_mapping_type": "string","mapping": {"type": "keyword"}}}],"properties": {"age": {"type": "integer"},"firends": {"properties": {"age": {"type": "integer"},"num_test1": {"type": "keyword"}}},"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"num_test2": {"type": "keyword"},"num_test2_text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词