elasticSearch-索引详解-映射详解

电玩女神 2022-12-10 10:21 453阅读 0赞

文章导航

  • mapping 映射定义
  • mapping type废除说明
  • 字段类型介绍
    • 字段类型datatypes:
  • 字段定义属性介绍
  • Multi Fields 多重字段
  • 元字段介绍
  • 动态映射

mapping 映射定义

映射定义索引中有什么字段,字段的类型等结构信息.
类比数据库中的表结构定义
ES中,支持手动定义映射,动态映射两种方式

示例:

  1. /*
  2. 映射定义后续是可以进行修改的
  3. */
  4. PUT testmapping
  5. {
  6. "mappings" : {
  7. "properties" : {
  8. "field1" : { "type" : "text" }
  9. }
  10. }
  11. }

mapping type废除说明

  1. 从6.0.0开始限定仅包含一个映射类别定义,兼容5.x中的多映射类别
  2. 从7.0开始移除映射类别
  3. 多个映射类别转变为多个索引

ES最先的设计是用索引类比关系型数据库的数据库,mapping type 类比 数据库表, 一个索引中可以包含多个映射别.
这种类比存在一个严重的问题,如果当多个mapping type中存在同名字段,而且同步字段还是不同的类型时,在一个索引中就会不好处理.因为索引引擎中只有 索引 - 文档的结构,换句话说,数据库关系型数据库中,表之间是相互独立的。一个表中的列与另一个表中同名的列没有关系。然而在映射类型中有相同名称字段的不同映射类型是由同一个字段支持的,
即相当于user表中的user_name和member表中的user_name是存储在同一个字段上的

Maaping映射示例:

  1. PUT twitter
  2. {
  3. "mappings": {
  4. "_doc": {
  5. "properties": {
  6. "type": { "type": "keyword" },
  7. "name": { "type": "text" },
  8. "user_name": { "type": "keyword" },
  9. "email": { "type": "keyword" },
  10. "content": { "type": "text" },
  11. "tweeted_at": { "type": "date" }
  12. }
  13. }
  14. }
  15. }

字段类型介绍

字段类型datatypes:

字段类型定义了该如何索引存储字段值.
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html


































核心类型 示例
string text and keyword
Numeric datatypes long, integer, short, byte, double, float, half_float, scaled_float
Date datatype date
Boolean datatype boolean
Binary datatype binary
Range datatypes integer_range, float_range, long_range, double_range, date_range

字段定义属性介绍

字段的type(Datatype)定义了如何索引存储字段值, 还有一些属性可以让我们根据需要来覆盖默认的值或进行特别定义
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html




















































































字段 作用 字段 作用
analyzer 指定分词器 ignore_malformed
normalizer 指定标准化器 index_options
boost 指定权重值 index
coerce 强制类型转换 fields
copy_to 值复制给另一字段 norms
doc_values 是否存储docValues null_value
dynamic position_increment_gap
enabled 字段是否可用 properties
fielddata search_analyzer
eager_global_ordinals similarity
format 指定时间值的格式 store
ignore_above term_vector

Multi Fields 多重字段

当我们需要对一个字段进行多种不同方式的索引时, 可以使用fields多重字段定义.
如一个字符串字段即需要进行text分词索引,也需要进行keyword关键字索引来支持排序,聚合
或者需要用㓊分词器进行分词索引

  1. // city,raw这2个是自定义的
  2. PUT my_index
  3. {
  4. "mappings": {
  5. "_doc": {
  6. "properties": {
  7. "city": {
  8. "type": "text",
  9. "fields": {
  10. "raw": {
  11. "type": "keyword"
  12. }
  13. }
  14. }
  15. }
  16. }
  17. }
  18. }

添加数据

  1. PUT my_index/_doc/1
  2. {
  3. "city": "Beijing"
  4. }
  5. PUT my_index/_doc/1
  6. {
  7. "city": "Shanghai"
  8. }

查询

  1. GET my_index/_search
  2. {
  3. "query": {
  4. "match": {
  5. "city": "beijing"
  6. }
  7. },
  8. "sort": {
  9. "city.raw": "asc"
  10. },
  11. "aggs": {
  12. "Cities": {
  13. "terms": {
  14. "field": "city.raw"
  15. }
  16. }
  17. }
  18. }

在这里插入图片描述

元字段介绍

元字段是ES中定义的文档字段
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html

在这里插入图片描述
在这里插入图片描述

动态映射

可以快速使用ES,不需要先创建索引,定义映射.

例如:

  1. PUT data/_doc/1
  2. { "count": 2 }

es将自动为我们创建data索引,映射,类型为long的字段count

  • 索引文档时,当有新字段,ES将根据我们字段的json的数据类型为我们自动加入字段定义到mapping中

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,453人围观)

还没有评论,来说两句吧...

相关阅读