千家信息网

elasticsearch 5.x数据类型与映射的介绍

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"elasticsearch 5.x数据类型与映射的介绍",在日常操作中,相信很多人在elasticsearch 5.x数据类型与映射的介绍问题上存在疑惑,小编查阅了各式资料,整理出简
千家信息网最后更新 2026年10月31日elasticsearch 5.x数据类型与映射的介绍

这篇文章主要介绍"elasticsearch 5.x数据类型与映射的介绍",在日常操作中,相信很多人在elasticsearch 5.x数据类型与映射的介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"elasticsearch 5.x数据类型与映射的介绍"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在前面的文章中,我们创建了索引为bank的文档结构,但是,在创建1000个文档的时候,并没有指出他们每个属性的数据类型。在没有数据类型映射定义的情况下创建文档,这在ES中是允许的,因为ES会帮我们自动映射数据类型。但是,在我们的项目中,必须要先定义文档的数据类型,再操作文档,因为我们需要根据业务的需要,指定数据的属性,例如,是否需要全文索引,是否需要分词,分词器是什么。

下面我们看下索引bank自动创建文档数据类型映射成什么?

{  "bank": {    "mappings": {      "account": {        "properties": {          "account_number": {            "type": "long"          },          "address": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "age": {            "type": "long"          },          "balance": {            "type": "long"          },          "city": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "email": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "employer": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "firstname": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "gender": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "lastname": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          },          "state": {            "type": "text",            "fields": {              "keyword": {                "type": "keyword",                "ignore_above": 256              }            }          }        }      }    }  }}

上面通过type指定了数据的类型。接下来,我们将开始认识这些数据类型

一、数据类型

字段类型概述

一级分类二级分类具体类型
核心类型字符串类型text,keyword
整数类型integer,long,short,byte
浮点类型double,float,half_float,scaled_float
逻辑类型boolean
日期类型date
范围类型range
二进制类型binary
复合类型数组类型array
对象类型object
嵌套类型nested
地理类型地理坐标类型geo_point
地理地图geo_shape
特殊类型IP类型ip
范围类型completion
令牌计数类型token_count
附件类型attachment
抽取类型percolator

1、字符串类型


  text 类型:当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。
  keyword:keyword类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。

2、整数类型

类型取值范围
byte-128~127
short-32768~32767
integer-231~231-1
short-263~263-1

在满足需求的情况下,尽可能选择范围小的数据类型。比如,某个字段的取值最大值不会超过100,那么选择byte类型即可。迄今为止吉尼斯记录的人类的年龄的最大值为134岁,对于年龄字段,short足矣。字段的长度越短,索引和搜索的效率越高。

3、浮点类型

类型取值范围
doule64位双精度IEEE 754浮点类型
float32位单精度IEEE 754浮点类型
half_float16位半精度IEEE 754浮点类型
scaled_float缩放类型的的浮点数

对于float、half_float和scaled_float,-0.0和+0.0是不同的值,使用term查询查找-0.0不会匹配+0.0,同样range查询中上边界是-0.0不会匹配+0.0,下边界是+0.0不会匹配-0.0。

其中scaled_float,比如价格只需要精确到分,price为57.34的字段缩放因子为100,存起来就是5734
优先考虑使用带缩放因子的scaled_float浮点类型。

4、date类型

日期类型表示格式可以是以下几种:
(1)日期格式的字符串,比如 "2018-01-13" 或 "2018-01-13 12:10:30"
(2)long类型的毫秒数( milliseconds-since-the-epoch,epoch就是指UNIX诞生的UTC时间1970年1月1日0时0分0秒)
(3)integer的秒数(seconds-since-the-epoch)

5、boolean类型 true和false

6、 binary类型

进制字段是指用base64来表示索引中存储的二进制数据,可用来存储二进制形式的数据,例如图像。默认情况下,该类型的字段只存储不索引。二进制类型只支持index_name属性。

7、array类型

(1)字符数组: [ "one", "two" ]
(2)整数数组: productid:[ 1, 2 ]
(3)对象(文档)数组: "user":[ { "name": "Mary", "age": 12 }, { "name": "John", "age": 10 }],
注意:lasticSearch不支持元素为多个数据类型:[ 10, "some string" ]

8、 object类型

JSON对象,文档会包含嵌套的对象

9、ip类型

p类型的字段用于存储IPv4或者IPv6的地址

二、Mapping 支持属性

下面解释下一些重要的映射属性

index

设置此字段能不能被查询,就是决定要不要将这个字段放进倒排索引裡

若index设置为true(默认是true),则表示这个这个字段会被放进倒排索引裡,如果是text就是分词过后放进索引,如果是keyword、integer...就直接整段放进索引裡

若index设置为false,则表示这个字段不放进倒排索引裡,因此不能查询这个字段(因为他不存在于倒排索引裡)

通常这种被设成false的字段,可以想像成是属于一种附属的字段,就是不能被match、term查询,但是当该文档被其他搜索条件搜出来时,他可以附带的一起被找出来,因为他们同属于同一个文档。

举个例子,定义user索引的映射

PUT /user{        "mappings": {                "doc": {                        "properties": {                                "name": {                                        "type": "keyword",                                        "index": false                                },                                "uid": {                                        "type": "integer"                                },                                "nickname": {                                        "type": "text",                                        "analyzer": "standard"                                }                        }                }        }}

当搜索uid时,name会一起被找出来

/user/_search{    "query": {        "term": {            "uid": 1        }    }}

如果搜索name属性,将会报错

GET /user/_search{    "query": {        "term": {            "name": "hugo"        }    }}

出错信息如下

          "caused_by": {            "type": "illegal_argument_exception",            "reason": "Cannot search on field [name] since it is not indexed."          }

analyzer

主要用在text类型的字段上,就是设定要使用哪种分词器来建立索引

可以使用内建的分词器,或是使用自定义的分词器

可以使用/_analyze测试分析器具体会将句子分词成什么样子,它能帮助我们理解Elasticsearch索引内部发生了什么

GET 127.0.0.1:9200/_analyze{    "analyzer": "standard",    "text": "Text to analyze"}

boost

官方建议:index time boost is deprecated. Instead, the field mapping boost is applied at query time.
也就是说,官方推荐在查询时指定boost。

我们可以通过指定一个boost值来控制每个查询子句的相对权重,该值默认为1。一个大于1的boost会增加该查询子句的相对权重。boost参数被用来增加一个子句的相对权重(当boost大于1时),或者减小相对权重(当boost介于0到1时),但是增加或者减小不是线性的。换言之,boost设为2并不会让最终的_score加倍。

POST /bank/_search?pretty{    "query": {        "match" : {            "address": {                "query": "mill",                "boost": 2            }        }    }}

查询结果

{  "took": 1,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "skipped": 0,    "failed": 0  },  "hits": {    "total": 4,    "max_score": 8.620199,    "hits": [      {        "_index": "bank",        "_type": "account",        "_id": "472",        "_score": 8.620199,        "_source": {          "account_number": 472,          "balance": 25571,          "firstname": "Lee",          "lastname": "Long",          "age": 32,          "gender": "F",          "address": "288 Mill Street",          "employer": "Comverges",          "email": "leelong@comverges.com",          "city": "Movico",          "state": "MT"        }      },      {        "_index": "bank",        "_type": "account",        "_id": "136",        "_score": 8.532413,        "_source": {          "account_number": 136,          "balance": 45801,          "firstname": "Winnie",          "lastname": "Holland",          "age": 38,          "gender": "M",          "address": "198 Mill Lane",          "employer": "Neteria",          "email": "winnieholland@neteria.com",          "city": "Urie",          "state": "IL"        }      },      {        "_index": "bank",        "_type": "account",        "_id": "970",        "_score": 7.723722,        "_source": {          "account_number": 970,          "balance": 19648,          "firstname": "Forbes",          "lastname": "Wallace",          "age": 28,          "gender": "M",          "address": "990 Mill Road",          "employer": "Pheast",          "email": "forbeswallace@pheast.com",          "city": "Lopezo",          "state": "AK"        }      },      {        "_index": "bank",        "_type": "account",        "_id": "345",        "_score": 7.723722,        "_source": {          "account_number": 345,          "balance": 9812,          "firstname": "Parker",          "lastname": "Hines",          "age": 38,          "gender": "M",          "address": "715 Mill Avenue",          "employer": "Baluba",          "email": "parkerhines@baluba.com",          "city": "Blackgum",          "state": "KY"        }      }    ]  }}

三、更新映射

当首次创建一个索引的时候,可以指定类型的映射,但假设后来想要增加一个新的映射字段,可以使用/_mapping把新的字段加进mapping映射裡

可以增加一个新的映射,但是不能修改存在的映射,原因是因为这个映射可能有文档去用,如果改了映射的类型,可能会导致索引的数据出错,因此只能新加字段进去,不能修改

具体实例

在user映射中的doc类型增加一个新的名为tag的keyword

PUT /user/_mapping/doc{    "properties": {        "tag": {            "type": "keyword",        }    }}

到此,关于"elasticsearch 5.x数据类型与映射的介绍"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

类型 字段 索引 数据 文档 查询 属性 就是 浮点 搜索 字符 范围 放进 二进制 对象 数组 权重 存储 学习 地理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会主任 江苏根荣互联网科技 互联网科技工作委员会副主任毛军 新华互联网科技学院 互联网金融 科技 互联网络科技有限公司 互联网科技媒体 凡科互联网科技 朗涯互联网科技 云电互联网科技 万达互联网科技 互联网科技咨询 上海电发互联网科技有限公司 互联网科技教育视频 链环科技传统企业怎么转型互联网 翼展科技 首家互联网医院 长沙渺峰互联网科技有限公司 保山互联网科技靠谱吗 科技互联网专业工作会议发言稿 陕西彩京云互联网科技有限公司 广州百单互联网科技有限公司 美国互联网科技 老年人脱离互联网科技的作文 青岛中康互联网医疗科技有限公司 济南华为互联网科技产业总部基地 爱医互联网络科技 杭州披云加互联网科技有限公司 悟空问答互联网科技 高科技和互联网的现代国家 株洲百竞科技的互联网营销顾问
0