ES 操作索引库——mapping属性

ES中,索引库就相当于MySql的表;索引库里面有很多的文档,相当于MySql表里面一行一行的数据。

我们知道,MySql数据库要先创建表 才能去添加数据;ES也一样,要先有了索引库,才能往索引库里边添加文档

 

要想创建一个索引库,就像建表一样:建表语句里是要指定字段的一些约束的,例如id、store字段是什么类型的等等,

create table user (
  id char(20) primary key,
  store char(12) not null
)

因此索引库在创建时也需要指定mapping映射。mapping映射就是对文档的约束。

 

type:字段数据类型

 name就是object类型的,对象可以任意嵌套。firstName和lastName属于name这个字段的子属性(或子字段),firstName和lastName也是可以参与搜索的

ES中是没有数组这种类型的,但是ES允许某一个字段有多个值,因此score是double或float类型的。

此外,type还有geo_point和geo_shape类型:

 

 

 

index:是否创建倒排索引

若值给了true,将来就给这个字段创建倒排索引,就可以参与搜索了;若给了false,就不会给这个字段创建倒排索引,将来就没有办法搜索这个字段了

 

analyzer:使用哪种分词器。结合type的类型为text时使用

 

properties:一个字段的子字段。可以用properties指定name的子字段——firstName和lastName

 

如果我们想要根据多个字段搜,也就是用户的查询对应的是索引库里的多个字段,可以用copy_to属性:

 比方说我想要根据 字段A、字段B和字段C搜,就可以把这三个都拷贝到一个字段去,字段名字随便起,比如叫all,类型是type:text,分词器ik_max_word;这样的话,字段all就同时具备了字段A、B、C的值,也就是说,你就实现了在一个字段里搜到多个字段的内容了。这种拷贝,ES底层做了优化,它并不是真的把文档拷贝进去了,而只是基于all创建倒排索引,所以查的时候看不到这个字段,但搜索却能根据它搜

 

posted @ 2023-12-10 17:31  1stzz1  阅读(133)  评论(0)    收藏  举报