当前位置:   article > 正文

elasticSearch-索引详解-映射详解_es 的索引映射

es 的索引映射

mapping 映射定义

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

示例:

/*
映射定义后续是可以进行修改的
*/
PUT testmapping
{
"mappings" : {
  "properties" : {
    "field1" : { "type" : "text" }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 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映射示例:

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

字段类型介绍

字段类型datatypes:

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

核心类型示例
stringtext and keyword
Numeric datatypeslong, integer, short, byte, double, float, half_float, scaled_float
Date datatypedate
Boolean datatypeboolean
Binary datatypebinary
Range datatypesinteger_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是否存储docValuesnull_value
dynamicposition_increment_gap
enabled字段是否可用properties
fielddatasearch_analyzer
eager_global_ordinalssimilarity
format指定时间值的格式store
ignore_aboveterm_vector

Multi Fields 多重字段

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

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

添加数据

PUT my_index/_doc/1
{
  "city": "Beijing"
}
  • 1
  • 2
  • 3
  • 4
PUT my_index/_doc/1
{
  "city": "Shanghai"
}
  • 1
  • 2
  • 3
  • 4

查询

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

在这里插入图片描述

元字段介绍

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

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

动态映射

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

例如:

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

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

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

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号