00:00
前面我们说了aggregations聚合,接下来呢,我们再来看一下mapping映射,映射是什么呢?我们也可以来参照官方文档,映射呢,在这一块好来点开官方文档的说呢,Man映射啊,它是来定义我们一个文档如何被进行处理的。也就是说我们的这些属性字段是怎样被存储和被检索的,比如举一个例子,我们可以使用映射呢来定义哪个string类型的这个字段应该被当成我们全文检索字段,包括呢?哪个属性它是包含一个数字啦,日期或者我们的地理位置坐标,包括呢,我们日期的格式化信息等等,那这个类似于我们在写circle的时候,我们创建表的时候。要定义每一列的这些数据类型都长什么样,那这个呢,就是我们说的映射,而在ES中我们字段呢,有非常多的类型,这些类型呢,大家也发现我们给ES中存数据的时候,并没有像MYS,我们先要进行建表,Create table来定义每一列长什么样,我们ES呢,会在第一次保存数据的时候。
01:10
去来自动猜测我们数据的这些类型,所有的这些数据类型呢,文档里边也都有说,比如在map里边有一个叫fair的data types,我们这个属性的各种类型有包含数组布尔,包括日期以及地理位置信息,IP地址等等一堆,它能兼容非常多种类型,我们第一次来存一个jas文档的时候,它就会给我们自动来猜测,当我们这个类型呢,也可以进行一定的修改,但在修改之前呢,我们得来说一下,我们这个映射里边呢,有一个最大的细节来看一下咱们这个映射章节,这说了一句话叫manping tap,我们这个映射的类型已经呢过时了,在6.0版本的时候,相当于在6.00版本呢,我们已经移除了这个映射类型,也就是说我们以前说的每一个这个索引下边呢,都至少拥有一个这个类型,这个类型呢,是来决定我们这个文档如何被存储的,但是呢,在6.0版本及以后,我们ES呢,移。
02:10
除了类型这一说,也就是我们以前的这种关系。我们ES里边呢,会有各种索引,每个索引下呢可能有不同的类型,现在呢,我们ES没有类型这个概念了,直接将所有的文档都存在某个索引下边,那为什么要移除类型呢?我们说这是由于ES的底层ES呢是使用这个lon开发的,在ES中不同类型,但是名称相同的属性,在lon中处理的方式是一样的,所以就会导致我们同样一个索引不同类型,比如每一个下边呢都有一个name,无论是employee的name还是商品的name,只要你是name字段,那在底层的处理都是一样的,那这样呢就会引申一些问题,所以呢,在ES6级以后,我们就移除了这个类型,因为如果不同类型下我们相同的两个属性字段,可能会导致我们ES里边的处理冲突,导致我们整个lo的检索效率下降,所以呢,我们整个为了去除T,其实就是来提高我们ES处理数据的这些效。
03:15
虑的,所以呢,我们在ES7,哎,我们来看一下这一块说的,我们在七级以后,我们就可以不用我们这些类型了,诶这一块文档没说,那在后来的,诶这一块有一个说移除类型。那这个艺术类型呢,我们一直往下翻,他在这呢会给我们来介绍,也推荐我们在ES7级以后呢,就不要用这个类型了,我们一直往上看,也就说在这个7.0以后版本啊,如果我们在还来指定一个类型的话,那就会产生一个我们这个过期的这个警告,而且呢,未来计划在8.0以后的版本,整个就要把这个移除掉,所以大家。在这块注意一下文档,这呢也说的很清楚,如果ES升级到八了,我们以后的这个类型就再也不支持了,那我们以后存东西呢,我们就不要再来指定这个type类型了。
04:06
这个类型呢,都是6.0以前的版本在用的,那基于这个我们继续说我们的这个映射,原来呢,我们将一个文档都存在某一个索引,某一个类型下边,那我们说的这个映射指的就是我们这个文档每一个字段都是什么数据类型,它是一个数字还是一个文本,还是一个未知坐标等等等等,当然我们也可以查看它的这个默认的映射,我们说这个映射啊,我们从来未指定,我们第一次保存数据,ES就给我们拆来了,那我们之前呢,批量保存了一些银行里边的数据,我们想要查映射呢,也可以看一下,来到K班那里边,我们直接使用get,我们来查银行下边的map信息,好,我们来走,那这呢就可以获取到银行里边的这个映射,那这个映射呢?Pro这个属性里边就包含了我们每一个字段都是什么类型,比如我们的数据account number,它是long类型的,Address它是一个。
05:06
本类型的,那只要呢,Type是test,那它默认就会进行全文检索,检索起来呢就会封词,而且呢,我们以前还测试过,那想要精确检索address的值,我们还可以用address.keyword所以我们就会发现其实keyword呢是在这来定义的,比如说这个属性也可以有子属性,它有一个子属性叫keyword,它的这个类型呢叫keyword,而不是一个test,那如果就是利用它的子属性address.qword进行查询,那就是一个精确匹配,所以这说明了每一个属性的映射类型,这有一个test,继续看我们的年龄,这是一个浪,然后呢,包括balance,这是一个浪,只要我们是数字默认呢,都会被猜测成浪,还有我们这个city,只要是字符串都会被拆成文本,而且呢,每一个文本默认呢,都会有一个自己的keyword子属性,它用来做精确匹配检索。
06:05
包括我们的email也是这样子的文本,还有qword,而且呢,这个employer也是类型是文本,这还有qword的属性,那其他这些呢都一样,这就是我们说的这个映射,我们第一次存数据的时候,那默认ES就猜出了这些映射规则,但往往这些规则呢,可能不是我们想要的,所以呢,我们也可以来修改一些映射,当然我们在创建和保存索引的时候。我们在默认第一次给索引里边保存数据之前,我们就可以给索引来指定映射,所以我们可以先来看一下,我们可以先来创建映射,当然跟映射有关的所有文档,大家全部参照我们这一块的,我们来到我们的这一块文档这一块提示了我们这个移除了我们这个类型,我们以后呢,索引下边我们就不带类型了,当然整个映射的操作我们可以先来看我们这个更文档mapping在这一块呢,就会提示我们,我们这些映射呢如何改变等等,那第一个就是创建一个索引,并且呢,我们来指定指明我们这些映射,比如举一个例子。
07:09
我们想要给某个所以下存数据,那在存数据之前,我们就可以来指定这个数据里边每一个字段的映射规则,那我们创建映射的操作就是使用put发送put请求,然后呢,这一块来指定我们的索引,接下来在这来编写我们的映射规则。好,我们来写一下,比如我们写一个put来一个索引my index,我们现在呢,这个索引我们从未用过,这是一个新索引。那给这个新索影像保存数据之前,我们可以先来创建他们的映射规则,我们可以来写mans映射规则,映射规则里边呢,使用properties来指明每一个属性,它的这个映射类型都是什么,比如参照文档,我们有很多属性,那我们就每一个属性它的详细规则一个大括号,每一个属性详细规则一个大括号,好,我们来写一下,比如我们的这个age,它的规则一个大括号,首先呢,在规则里边有一个叫type。
08:11
A的类型是什么?我们可以让它是一个数字,诶,Integer,那如果我们不说是integer,它默认还会给我们猜成只要是数字啊,我们以前这都拆成了一个浪,包括我们以前的这个H,它也拆成了浪,所以我们在这可以给他指定这是一个配。当然我们这些属性到底有多少类型,我们也说过,全部要参照文档。文档里边这有一个叫属性的数据类型,我们把它展开,所有的数据类型呢,在这儿都有介绍,兼容数字类型有这么多种日期类型,包括纳秒时间的这些日期类型等等等等,下边一堆,那么后来用到的时候呢,我们再来看就行了。那么来继续,那现在呢,指定了第一个属性edge,它的类型呢,是第二个属性,我们来参照我们文档这一块。
09:01
我们来指定一个email,它的这个type是keyword,那只要是keyword类型的,那它就不会来进行全文检索,它就会做一个精确匹配好,我们来写一个type type呢,我们就叫keyword,这也都有提示,包括第三个,比如我们又来填一个属性叫name,这是它的姓名,这个姓名呢,我们想要全文检索好,那我们就可以来写一个T,只要是T的字段,就会进行分词,保存数据的时候,分词检索的时候呢,按照分词进行匹配来做一个全文检索。那这样呢,我们就相当于规定了my index下存的这些数据,他们每一个属性都是什么样子的,而且我们说了。在6.0以后,我们都不建议在索引下再来使用类型了,那我们全部都不加类型好来运行,那我们这块呢,就运行成功,我们就创建了一个索引,并且呢,指定了我们这个索引下的这些数据的每一个属性的类型,也就是我们指定了数据的映射关系。
10:08
这是我们说的映射,以及如何创建一个新的索引,并给它指定映射。
我来说两句