索引的映射
date
Jul 31, 2021
slug
elasticsearch-guide-index-mapping
status
Published
tags
Elasticsearch
读书
summary
type
Page
索引中 Type 的概念在未来版本中被移除,其中一个原因是,Lucene 处理索引中对象的字段时,会将所有对象的字段打平,这导致一个问题,在索引中多个对象里面有相同的字段名,会导致打平后字段重名。如一个索引的定义如下:
people 对象含有 name 和 address 两个属性字段,transactions 对象含有 timestamp 和 message 两个属性字段。Lucene 处理后的样子:
可以看到字段都被打平了,如果此时出现不同对象里有相同字段的话,会出现冲突。
根对象 Root Object
mapping 的最高层被称为根对象。
有 _source 属性,有 _all 属性。
_all 属性可以将所有字段当做有一个整体去搜索:
动态映射
如果索引中的文档出现了以前未定义过的字段,默认会自动分配一个类型,可以通过 dynamic 属性来定义具体怎么操作:
true
动态添加新的字段—缺省false
忽略新的字段strict
如果遇到新字段抛出异常自动日期检测
如果遇到这样的字段
Elasticsearch 会自动映射成 date 类型,但其实 note 使用一个字符串类型的备注,下一条数据可能是
这种情况下就会报错,因为 note 已经被设定成了日期类型。使用 date_detection 关闭日期映射。
使用别名替换索引
一些情况下可能需要重建索引,可使用 scroll 深度翻页加上 _bulk 批量操作来重建索引,也可以使用 Elasticsearch 提供的 reindex API 完全交给 Elasticsearch 操作。
建好新索引后,查询就需要从旧索引替换到新索引上。可以使用别名 aliases 来实现不停机的更新,别名有如下几个特点:
- 在运行的集群中可以无缝的从一个索引切换到另一个索引
- 给多个索引分组 (例如,
last_three_months
)
- 给索引的一个子集创建
视图
先给 index1 创建别名