00:00
前面我们给大家分析了一下ES里边要存储的这些SQ的数据模型,但在这里边呢,有一个叫ne的数据类型,它是什么意思呢?在ES中马上叫嵌入式的,如果没有嵌入式会出现什么问题,我们可以将这个数据类型呢?我们在ES里边我们来检索一下,来看一下它是怎么用的。我们来到这个ne data type,我们ne的这个数据类型在ES里边,说我们这个如果是数组类型的对象,它呢,他们会被扁平化处理,什么叫扁平化处理,他在这呢,举了一个例子,比如我们给myin内到此里边存了一个数据,诶这个数据是这样,那我们就直接来演示,我把这个复制过来,来放到我们K班的里边,走,我们给把index里边来存一个dock,一走,我们现在呢,把这个数据保存起来了,那它在E里边呢,会被扁平处理,扁平处理成什么样呢?我们来可以看一下文档,文档说在ES里边会被翻译成这样,我们存的是一个用户,他的first name是Joy last是Smith,我们存了两个用户,一个是John Smith,另外一个呢是Alice white,相当于呢,我们有两个人,但我们这两个对象呢,是一个数组,他最终呢,就会处理成这样。
01:21
他把所有的user里边,因为user里边有两个属性first和last,把所有first的值合起来放在一个数组里边,是这样,然后呢,把所有last的值合起来放在一个数组里边,就是这样。那接下来假设我们有一天我们要器来检索爱ice密,我们是会发现实际我们没有存过爱ice密,我们存过赵密和爱ice white,但是呢,它会被检索到,比如我把这一个我们拿来看一下CTRLC,我来复制过来,好,我们现在呢,就有一个数据,他们所属分组是这个,里边两个用户分别是John Smith和Alice Smith,但我想找用户的first name是Alice last name是Smith的,相当于想找爱ice Smith,本来我们任何一个用户都不是,但是我们想要找的话走。
02:14
我们发现呢,找到了一条记录,这条记录呢,就是这个group fans user的这两个对象,那就奇怪了,为什么能找到这两条记录呢?我们可以看一下,其实它的这个扁平化处理,它将每一个属性的所有值都抽取放到数组里面以后如果我们来检索,进行match匹配。按照user first是爱ice丝的,我们会发现第一条记录,确实user first,它不仅有爱ice丝,还有照,它可能还有很多值,相当于它包含确实包含爱ice,而且呢,它判断last name是Smith的,发现第二个属性,它确实也包含Smith,因为被扁平化处理了。所有的这些检索条件都只是判断我们这个数字里边有没有这个值。那有了,那自然我们第一个数据就被查询出来了,所以呢,这就会出现问题,会出现一些错误的结果,那为了解决这个问题怎么办呢?我们可以来使用我们叫嵌入式的这个属性,要说当我们这个数组里边都是对象的时候,我们需要呢,写嵌入式的这个属性,当然数组里边不是对象,就是基本值要进行检索了,那就无需了。那嵌入式属性怎么做好,我们可以先来修改一下它的这个映射,因为这个映射啊,默认它不是嵌入式的属性,我们可以看一下my index my index的杠走。
03:36
那这块的这个my in this是我之前操作的数据有点问题,但我们来看这个user,那为了好看起见,我们先来删除我们这个my in this,那就叫my in this,好,我把这个呢删除,我给它里边默认存上一个文档,当然呢,这种检索是有问题的,不应该检索出数据,但它检索出来了,来看一下默认的这个文档的映射。它映射呢,相当于有一个第一个group group的类型是test,可以全文检索的,我们不用看,然后呢,接下来第二个有一个叫user user里边又有一个属性叫first和last,这两个属性它分别是test的,但是呢,整个user它并没有说它是一个嵌入式的,那我们呢,可以来修改一下,那修改之前呢,我们还是把这个索引先删掉,我们用我们现在新的嵌入式的方式,我们把这一块的映射我们复制过来,CTRLC来复制过来,这一块的映射呢,相当于我们来指定我们这个user类型呢,它是一个嵌入式的,好,我们来给它走一下,然后呢,我们来重新给里边保存数据。
04:41
走,那现在呢,保存进来了,接下来我们再来进行查询,走,我发现呢,现在是零条数据它被成功处理了,那就是由于我们相当于加了一个设置,Group呢是test没问题,但是用户它的类型是一个嵌入式的,这样它就不会出现我们扁平化处理的这些错误,所以我们数据在设计我们这个属性的时候,我们要检索的我们商品属性一定要是一个嵌入式的这个属性,这是我们说的ne的作用。
我来说两句