Elasticsearch Mapping是啥?
时间:2022-07-22
本文章向大家介绍Elasticsearch Mapping是啥?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是Mapping
我们知道,es
如果对应数据表,表中的数据是不是有数据类型,那么es
的mapping
就是来设置这个字段类型的。它的主要作用:
- 定义字段名称
- 定义字段的数据类型,例如字符串、数值等
- 字段 倒排索引的相关配置,比如说可以通过配置字段是否需要被索引
-
Mapping
会把Json
文档映射成Lucene
所需的扁平格式 - 一个
Mapping
属于一个索引的Type
,在7.0
之后版本索引只有一个Type(_doc)
常用来设置 Mapping 的数据类型
- 简单类型
- Text/Keyword
- Date
- Integer/Float/Double/Long
- Boolean
- Ip
这里说明一下Text
和Ketword
类型的区别
在es5之前是string,后面拆分成了Text和Keyword
按照官方文档的阐述,text
类型的数据用来索引长文本,例如电子邮箱主体部分或者一些产品的介绍,这些文本会被分析,在建立索引后被分词器进行分词,转化为词组。经过分词机制后es
允许检索到该文本切分而成的词语,但text
类型的数据不能用来做过滤、排序、聚合等操作
keyword
类型的数据可以满足电子邮箱、主机名、状态码等数据的要求,不进行分词,常常被用来做过滤、排序、聚合等操作
- 复杂类型-对象和嵌套对象
对象类型/嵌套类型
- 特殊类型(针对地理位置信息有特殊处理)
- geo_point
- geo_shape / percolator
Dynamic Mapping
简单来说,如果你不手动创建Mapping
,es
会自动根据json
来推断数据类型,但是不准确,这个的话我一般不会自动映射,所以大家知道一下这个就ok
手动创建 Mapping
PUT phone
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"cpu": {
"type": "text"
},
"created_at": {
"type": "date"
},
"system_code": {
"type": "integer",
"index": false
}
}
}
}
POST phone/_doc
{
"name": "苹果",
"cpu": "4核",
"created_at": "2019-11-01",
"system_code": 111
}
POST phone/_doc
{
"name": "华为",
"cpu": "4核",
"created_at": "2020-11-01",
"system_code": 221
}
GET phone/_search
{
"query": {
"match": {
"system_code": {
"query": 111
}
}
}
}
上面建立mapping
的时候,我对system_code
这个字段index
设置为false
,es
将不会对这个字段建立倒排索引
Index Options
ES
有四种不同级别的 Index Options
配置
- docs 记录 doc id
- freqs 记录 doc id 和 term 频次
- positions 记录 doc id 和 term 频次 和 term 位置
- offsets 记录 doc id 和 term 频次 和 term 位置和字符偏移量
Text
类型默认 positions
,其他默认为 docs
copy_to
copy_to
是为瞒足一些特定搜素需求,将多个字段 数值拷贝到目标字段,目标字段不会出现在 _source
。
PUT phone_1
{
"mappings": {
"properties": {
"name": {
"type": "text",
"copy_to": "fullname"
},
"cpu": {
"type": "text",
"copy_to": "fullname"
},
"created_at": {
"type": "date"
},
"system_code": {
"type": "integer",
"index": false
}
}
}
}
POST phone_1/_doc
{
"name": "苹果",
"cpu": "4核",
"created_at": "2019-11-01",
"system_code": 111
}
POST phone_1/_doc
{
"name": "华为",
"cpu": "4核",
"created_at": "2020-11-01",
"system_code": 221
}
GET phone_1/_search
{
"query": {
"match": {
"fullname": {
"query": "华为4核"
}
}
}
}
查询的时候,fullname
并没有在mapping
中声明,照样可以进行合并搜索
- quartz定时任务,已过期的内容自动下线
- http请求,HttpClient,调用短信接口
- Java常用工具类之压缩解压
- Java常用工具类之MD5加密
- Java常用工具类之发送邮件
- Spring Boot入门
- IDEA使用
- JFinal极速开发框架使用笔记(二) 两个问题,一个发现
- JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord
- JFinal极速开发框架使用笔记(四) _JFinalDemoGenerator实体类生成及映射自动化
- Python语言做数据探索教程
- Java常用工具类之时间转换(注释乱码,全)
- Java常用工具类之RegexpUtils,正则表达式工具类
- 短信接口发送验证码倒计时以及提交验证
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- apache tika检测文件是否损坏的方法
- Linux下二进制编译安装MySql centos7的教程
- Linux 6 修改ssh默认远程端口号的操作步骤
- 基于python的Linux系统指定进程性能监控思路详解
- ubuntu下的虚拟环境中安装Django的操作方法
- 详解linux下umask的使用
- Linux下设置每天自动备份数据库的方法
- Linux常用命令之chmod修改文件权限777和754
- 解决CentOS 7升级Python到3.6.6后yum出错问题总结
- Linux下如何挂载磁盘的方法示例
- centos7 PHP环境搭建 GD库 等插件安装方法
- CentOS服务器环境下MySQL主从同步配置方法
- awk命令
- linux下C语言实现写日志功能
- centOS7下Spark安装配置教程详解