Elasticsearch篇之Mapping设置
程序员文章站
2024-01-19 17:20:46
...
Elasticsearch篇之Mapping设置
Mapping简介
类似数据库中的表结构定义,主要作用如下:
- 定义Index下的字段名(Field Name)
- 定义字段的类型,比如数值型、字符串型、布尔型等
- 定义倒排索引相关的配置,比如是否索引、记录position等
GET books/_mapping
展示效果
自定义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"
}
}
}
}
}
- 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插件进行数据的查看
进行查询对比
“dynamic”: "strict"的时候在插入文档时会出现如下
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"
}
}
}
}
}
增加一条数据
PUT my_index/doc/1
{
"first_name": "张",
"last_name": "三"
}
查询数据(full_name为张三,必须同时满足)
GET my_index/_search
{
"query": {
"match": {
"full_name": {
"query": "张三",
"operator": "and"
}
}
}
}
Index参数说明
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"
}
}
}
查询结果
身份证号 手机号 密码 可以设置为不检索
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即可。
- 允许对同一个字段采用不同的配置,比如分词,常见例子如对人名实现拼音搜索,只需要在人名中新增一个子字段为pinyin即可。
下一篇: Stack原理讲解及方法剖析