es存储两种数据
-
es中存储的数据分为两种,原始文档和索引文档(倒排索引),这两个内容都可以分别配置的。
-
我们的一个查询请求,会通过分词器将你的条件进行分词,然后去倒排索引表中查询目标值
-
当然,如果你的es设置了分片,并且是一个多节点的集群环境,那他将在这些分片中进行检索,最后再合并
-
每个分片都有一个主分片,同时也有副本,当然你把相同分片的主和副本做到一台服务器上,意义不大,副本的意思就是当主分片所在的服务器宕机之后,另一台服务器的对应副本分片可以提升为主分片,对外提供服务
下面介绍存储部分字段
有时,我们文档中的字段可能只是一个检索条件,它本身的信息对外界意义不大,所以这种字段是可以不存的,这可以节省一些空间,下面进行了相关知识的总结:
- es中存储的数据分为两种,原始文档和索引文档(倒排索引),这两个内容都可以分别配置的
- es中默认的设置_source是enable的配置决定了字段是否被存储,它默认是
true
的,即存储整个文档 - 当_source.enable配置为false后,你还希望存储某些字段,可以使用
mappings.type._source.includes:[]
来实现 - 对于一些只需要查询、不需要返回的字段,可以通过
mappings.type._source.excludes:[]
来进行排除 - 对于es索引的mapping,为了安全,我们杜绝动态生成字段,需要配置这个属性
mappings.type.dynamic:"strict"
,如果字段没有mapping将直接报错 - 对于上面的
"strict"
,也可以让它不报错,新字段不写入,可以把值设成"false"即可,mappings.type.dynamic:"false"
,这个值支持随时更新的