欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch篇之Mapping设置

程序员文章站 2024-01-19 17:20:46
...

Elasticsearch篇之Mapping设置

Mapping简介

类似数据库中的表结构定义,主要作用如下:

  • 定义Index下的字段名(Field Name)
  • 定义字段的类型,比如数值型、字符串型、布尔型等
  • 定义倒排索引相关的配置,比如是否索引、记录position等
GET books/_mapping

展示效果
Elasticsearch篇之Mapping设置

自定义Mapping

Elasticsearch篇之Mapping设置

PUT my_index
{
  "settings": 
  {
    "number_of_shards": "5",
    "number_of_replicas": "0"
  },
  "mappings": {
    "doc": {
      "properties": {
        "title":{
          "type": "text"
        },
        "name": {
          "type": "keyword"
        },
        "age": {
          "type": "integer"
        }
      }
    }
  }
}

Elasticsearch篇之Mapping设置
Elasticsearch篇之Mapping设置

  • Mapping中的字段类型一旦设定后,禁止直接修改,原因如下
    • Lucene实现的倒排索引生成后不允许修改
  • 重新建立新的索引,然后做reindex操作
  • 允许新增字段
    • 通过dynamic参数来控制字段的新增
    • true(默认)允许自动新增字段
    • false不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
    • strict文档不能写入,报错
PUT my_index
{
  "settings": 
  {
    "number_of_shards": "5",
    "number_of_replicas": "0"
  },
  "mappings": {
    "doc": {
      "dynamic": false, 
      "properties": {
        "title":{
          "type": "text"
        },
        "name": {
          "type": "keyword"
        },
        "age": {
          "type": "integer"
        }
      }
    }
  }
}
GET my_index/_mapping
PUT my_index/doc/1
{
  "title": "hello word",
  "age": 21,
  "name": "wf"
}
PUT my_index/doc/2
{
  "title": "hello word",
  "age": 21,
  "name": "ls",
  "address": "china"
}

直接使用elasticsearch-head插件进行数据的查看
Elasticsearch篇之Mapping设置
进行查询对比
Elasticsearch篇之Mapping设置
Elasticsearch篇之Mapping设置
“dynamic”: "strict"的时候在插入文档时会出现如下
Elasticsearch篇之Mapping设置

copy_to参数说明

  • 将该字段的值复制到目标字段,实现类似_all的作用
  • 不会出现在_source中,只用来搜索
PUT my_index
{
  "settings": 
  {
    "number_of_shards": "5",
    "number_of_replicas": "0"
  },
  "mappings": {
    "doc": {
      "properties": {
        "first_name":{
          "type": "text",
          "copy_to": "full_name"
        },
        "last_name": {
          "type": "text",
          "copy_to": "full_name"
        },
        "full_name": {
          "type": "text"
        }
      }
    }
  }
}

Elasticsearch篇之Mapping设置
Elasticsearch篇之Mapping设置
增加一条数据

PUT my_index/doc/1
{
  "first_name": "张",
  "last_name": "三"
}

Elasticsearch篇之Mapping设置

查询数据(full_name为张三,必须同时满足)

GET my_index/_search
{
  "query": {
    "match": {
      "full_name": {
        "query": "张三",
        "operator": "and"
      }
    }
  }
}

Elasticsearch篇之Mapping设置

Index参数说明

Elasticsearch篇之Mapping设置

PUT my_index1
{
  "settings": 
  {
    "number_of_shards": "5",
    "number_of_replicas": "0"
  },
  "mappings": {
    "doc": {
      "properties": {
        "cookie":{
          "type": "text",
          "index": false
        }
      }
    }
  }
}
PUT my_index1/doc/1
{
  "cookie": "cookie-name-test"
}
GET my_index1/_search
{
  "query": {
    "match": {
      "cookie": "name"
    }
  }
}

查询结果
Elasticsearch篇之Mapping设置
身份证号 手机号 密码 可以设置为不检索

index_option

设置和之前index类似,在字段下面有个index_option

  • index_option用于控制倒排索引记录的内容,有如下4种配置
    • docs只记录doc id
    • freqs 记录doc id和term frequencies
    • positions 记录doc id、term frequencies和term position
    • offsets 记录doc id、term frequencies、term position和character offsets
  • text类型默认配置positions,其他默认为docs
  • 记录内容越多,占用空间越大

null_value

设置和之前index类似,在字段下面有个null_value

  • 当字段遇到null值时的处理策略,默认为null,即空值,此时es会忽略改值。可以通过设定改值设定字段的默认值

Mapping官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html

数据类型

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html

  • 核心数据类型
    • 字符串型text, keyword
    • 数值型long, integer, short, byte, double, float, halffloat, scaled_float
    • 日期类型date
    • 布尔类型boolean
    • 二进制类型binary
    • 范围类型integer_range, float_range, long_range, double_range, date_range
  • 复杂数据类型
    • 数组类型array
    • 对象类型object
    • 嵌套类型nested object
  • 地理位置数据类型
    • geo_point
    • geo_shape
  • 专用类型
    • 记录ip地址ip
    • 实现自动补全completion
    • 记录分词数token_count
    • 记录字符串hash值murmur3
    • percolator
    • join
  • 多字段特性multi-fields
    • 允许对同一个字段采用不同的配置,比如分词,常见例子如对人名实现拼音搜索,只需要在人名中新增一个子字段为pinyin即可。
      Elasticsearch篇之Mapping设置
相关标签: Elastic Stack