介绍Elasticsearch Mapping
概述
映射是定义文档及其包含字段如何存储和索引的过程。如我们使用关系型数据库,使用之前需要定义数据库和表以及表字段类型、索引以及约束等。我们可以把Elasticsearch中索引类比为SQL的数据库,文档对应表记录,那么映射可以理解为表的定义过程。
映射类型
每个索引都有映射类型用于决定文档如何被索引。映射类型包括:
-
元信息字段(Meta-fields)
元信息字段用于自定义如何处理文档的元数据,文档元数据包括: _index,_type,_id以及_source字段等。 -
字段或属性
映射类型包括一组文档相关的字段或属性。完整文档地址为:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html。
举例,映射定义:
- 字符串字段应该定义为全文字段,用于全文检索。
- 定义字段为数值、日期或地理位置
- 日期值格式定义
字段数据类型
字段的数据包括:
- 简单类型包括 text, keyword, date, long, double, boolean 和 ip。
- 支持JSON层次结构的类型,如object或nested。
- 特定类型,如geo_point, geo_shape, completion(实现自动完成特性)。
为不同目的、以不同方式索引同一字段通常很有用。举例,字符串字段可以定义为text类型实现全文检索,也可以定义为keyword类型实现排序或聚集。或者,索引字符串姿势使用不同的分线器,如: standard 分析器, english 分析器, french 分析器。
可以通过多字段达到目的,大多数数据类型通过fields参数支持多字段。
动态映射
字段和映射类型在使用之前不是必须要定义的。因为Elasticsearch支持动态映射,当索引文档时新字段名称会自动增加。新字段可以被增加到顶级映射类型,也可以在object和nested字段中。
动态映射规则可以配置,用于映射新的字段。
显示映射
你比Elasticsearch更了解你的数据,所以动态映射用途有限,有时你需要显示指定自己的映射规则。可以通过创建索引时创建字段映射,也可以通过put mapping api 给已存在索引中增加字段。
更新映射
针对已有文档的字段映射不能更新。改变映射意味着已索引的文档无效。可以通过新的映射创建新的索引,然后重新索引数据。如果仅想重命名字段而不改变映射,可以通过alias字段实现。
示例应用
在创建索引时可以指定映射,示例代码如下:
PUT my_index ①
{
"mappings": {
"properties": { ②
"title": { "type": "text" }, ③
"name": { "type": "text" }, ④
"age": { "type": "integer" }, ⑤
"created": {
"type": "date", ⑥
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
- 创新名称为my_index索引
- 指定映射中字段或属性
- 指定title字段包括text类型值,支持全文检索
- 指定name字段包括text类型值,支持全文检索
- 指定age字段包含integer类型值
- 指定created字段包含日期值,且包含来年各种可能的格式
总结
本文介绍了介绍Elasticsearch Mapping,实际应用中一般需要指定映射,提升搜索准确度。