es简介index-mapping

28 阅读2分钟

简介

索引index相当于关系型数据库中的table,是同一类数据的集合。mapping,是index的定义。本文将重点介绍index mapping常见概念间及区别。

文档doc相当于关系型数据库中的row,代表index中的一个数据

_source

默认情况,source字段存储数据的原始信息,查询的时候,会通过_source字段返回原始信息。可以通过设置关闭source

{
  "mappings": {
    "_source": {
      "enabled": false
    }
  }
}

也可以单独关闭大文本的source

{
  "mappings": {
    "_source": {
      "excludes": ["content"]
    }
  }
}

有几种情况需要保留_source字段:

  • 文档需要使用update或者update_by_query更新
  • 会用到reindex
  • 会用到文档高亮

text 与 keyword

文本类型text: 保存时会默认使用分词器分词;查询时,会根据相似度高到低排序返回结果。如对话、描述、备注等。

keyword:会原样存储;查询时,直接匹配,不匹配为false。如邮箱、邮编等。

当一个字段需要按照精确值过滤、排序、聚合等操作时,应该使用keyword类型。

doc_values与fielddata

doc_values与fielddata都是用来给文章建立正排索引的。区别在于:

维度doc_valuesfielddata
创建时间index时创建使用时动态创建
doc_values创建位置磁盘内存

显而易见,doc_values不占用内存,索引速度较低;fielddata占内存空间,开销大,速度快。

非text字段,默认doc_values是打开的。相比于fielddata,一般doc_values能满足使用需求。如果确定以后不会基于该字段做排序或者聚合,可以关掉该字段的doc_values,以节省空间。

enabled与store与index

enabled:默认为true。把es中object类型字段设置为false,es不去解析该字段,并且该字段不能被查询和store,只有在_source字段中才能被看到

index:默认为true。设置为false时,该字段不能被查询,如果查询会报错。但是可以被store,该字段在_source字段中可以被看到

store:默认false。当使用copy_to时,copy_to的目标字段不会在_source字段中存储。可以通过store控制