简介
索引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_values | fielddata |
---|---|---|
创建时间 | 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控制