Elasticsearch Mapping - Elasticsearch 学习实践 (2)
Mapping Mapping是用于定义文档及其内部属性字段如何被索引及搜索的。 系统字段 首先了解下系统特别制定的字段及其用法。 结构定位字段 _index: 类似数据库的库名 _type: 类似数据库的表名 _id: 类似数据库中每条数据的ID _uid: 结构是{type}#{id},可用于直接准确查询某条数据 文档数据字段 _source: 原始数据JSON _size: 原始数据JSON的大小 可用于索引查询的字段 _all: 将_source数据用空格切分保存后作索引(不建议保存,影响性能) _field_names: 用于是否包含某字段查询 路由字段 _parent: 用于在两种数据类型之间创建父子关系 _routing: 用于路由到特定的分片(shard) 其他字段 _meta: 用于存储特定的信息,比如有效版本号、可调用的类函数等 用户定义字段 定义用户索引的文档字段属性,系统本身是提供动态mapping,也就是说,我们可以在不定义mapping的情况下直接导入,系统会根据用户的第一倒入生成mapping。 但如果文档相对复杂,还是建议完整设置动态mapping来避免异常错误。 Elasticsearch 为我们提供了常用的字段类型,包括:text, keyword, date, boolean, long, integer, short, byte, double, float, binary, 复杂点的array, object, nested, 用于定位的geo_point, geo_shape, 特殊的ip, completion, token_count, murmur3, attachments, percolator。 其中需要注意的是 text和keyword都是string, 前者会被当作文本分析并索引,可用于包含关键词搜索,后者会作为一个整体而被作为完全匹配搜索, 主要用于聚合、排序等功能使用。 array 并非数据类型,仅仅作为数据类型标识。 object 同array 仅作为数据类型标识,无任何意义。 nested 等同于object数据类型,将数据结构的KEY扁平化如: "user.first" : [ "alice", "john" ], 常用设置 index....