映射
映射操作
更新字段映射
一般情况下对现有字段的映射不会更新,
新的属性被添加到对象数据类型的字段
新的多域字段被添加到现有的字段
doc_values可以被禁用
增加了ignore_above参数
字符串类型
string类型在ElasticSearch 旧版本中使用较多,从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代。
text
当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。
设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。
keyword
keyword类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。
如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。
浮点类型
类型 取值范围
doule 64位双精度IEEE 754浮点类型
float 32位单精度IEEE 754浮点类型
half_float 16位半精度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浮点类型。
日期字段
日期类型表示格式可以是以下几种:
(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)
ElasticSearch 内部会将日期数据转换为UTC,并存储为milliseconds-since-the-epoch的long型整数。
日期类型不用设置分词器。 通常日期类型的字段用于排序。
#给example索引新增一个birthday字段,类型为date, 格式可以是yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss
#添加日期类型的映射
PUT test_label_supplier/docs/_mapping
{
"properties": {
"birthday": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"ignore_malformed": false,
"null_value": null
}
}
}
解析说明:
format。通过format设置日期格式,常见的可以设置成年月日时分秒、年月日及毫秒值三种格式。
ignore_malformed。默认值false。如果为true,则忽略格式错误的数字。如果为false(默认值),则格式错误的数字将引发异常并拒绝整个文档。
null_value。默认是null。接受采用配置格式之一的日期值作为该字段,以替换任何显式的空值。默认为null,这意味着该字段被视为丢失。
https://blog.csdn.net/weixin_39723544/article/details/104237033
ignore_above
创建 mapping 时,可以为字符串(专指 keyword) 指定 ignore_above ,用来限定字符长度。超过 ignore_above 的字符会被存储,但不会被索引。
注意,是字符长度,一个英文字母是一个字符,一个汉字也是一个字符。
在动态生成的 mapping 中,keyword类型会被设置ignore_above: 256。
ignore_above 可以在创建 mapping 时指定。
https://www.letianbiji.com/elasticsearch/es7-ignore-above.html
https://blog.csdn.net/Z446136354/article/details/97245114
https://blog.csdn.net/ifenggege/article/details/86103918
ES 的数据结构
ES 存储的数据字段类型很丰富,主要有:核心类型、复合类型和特殊类型
一级分类 | 二级分类 | 具体类型 |
---|---|---|
核心类型 | 字符串类型 | string, text, keyword |
整型类型 | integer, long, short, byte | |
浮点类型 | double, float, half_float, scaled_float | |
逻辑类型 | boolean | |
日期类型 | date | |
范围类型 | range(integer_range, float_range, long_range, double_range, date_range) | |
二进制类型 | binary | |
复合类型 | 对象类型 | object |
嵌套类型 | nested | |
地理类型 | 地理坐标类型 | Geo-point |
地理地图 | Geo-shape | |
特殊类型 | IP 类型 | ip |
自动补全类型 | completion | |
统计类型 | token_count | |
附件类型 | attachement | |
过滤器类型 | percolator |
字段类型说明:
string 类型在旧版本使用较多,从 5.x 开始不再支持 string, 而用 text 和 keyword 替代,
text 类型表明,当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型,
设置text类型以后,字段内容会被分析和分词,在生成倒排索引以前,字符串会被分析器分成一个一个词项。
Keyword 类型适用于索引结构化得字段,keyword类型的字段只能通过精确值搜索到。
nested 嵌套类型是 object 数据类型的专用版本,允许对象数据可以彼此独立查询的方式索引。
专用于存储 JSON 类型数据,可以通过 JSON 内部字段进行查询。
geo_point 类型存储的是经纬度数值,可以按距离对文档进行排序和过滤,而位置距离计算都可以通过查询 ES 得出。
es mapping设置之dynamic
设置mapping的时候dynamic可以限制陌生字段,
true:遇到陌生字段,就进行dynamic mapping
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错
参考:
ElasticSearch 中的地理类型和特殊类型,这个周末圆满了!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 终于决定:把自己家的能源管理系统开源了!
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· ASP.NET Core - 日志记录系统(二)
· 实现windows下简单的自动化窗口管理