赞
踩
映射是定义存储和索引的文档类型以及字段的过程。一个映射定义了文档结构内每个字段的数据类型。映射通过配置来定义字段类型与该类型相关联的元数据的关系。例如,可以通过映射来定义日期类型的格式、数字类型的格式或者文档中所有字段的值是否应该被a字段索引等。
每个索引拥有一个或多个映射类型,用来在索引中将文档划分为不同的逻辑组。
每个映射类型拥有(在6.0.0中已被标记过期)
每个字段拥有一个数据类型,可以是简单数据类型,比如文本(text)、关键字(keyword)、日期型(date)、长整型(long)、双精度浮点型(double)、布尔型(boolean)或者IP。
支持JSON的层次性类型,比如对象(object)、嵌套(nested),或者特定的类型,比如地理点(geo_point)、地理形状(geo_shape)、completion。
基于不同目的对同一个字段进行不同方式的索引是很有用的。例如,一个字符串类型字段可以在全文搜索中作为分析字段,在排序或聚合时作为不分析的字段。或者,可以通过标准分析器、英文分析器或者法语分析器对字符串字段进行索引。
一个数据类型通过 fields参数支持多字段。
字段和映射类型在使用前不需要事先定义。依靠动态映射,通过索引文档,新的映射类型和字段名会自动添加。新的字段可以添加到顶级映射类型或者映射内部的对象和嵌入段
动态映射可以配置自定义映射用于新类型或者新字段。
相对于 Elasticsearch来说,我们对于数据类型的掌控更加全面,所以我们可以指定显式映射而不是使用动态映射。
当创建索引的时候,可以创建映射类型和字段。也可以在当前的索引中通过映射创建接口添加映射类型和字段。
除了记录之外,现有的映射类型和字段不能更新。修改映射意味着废弃已经索引的文档,我们反而应该根据映射创建新的索引并且重新索引数据。
映射类型在每个索引中是唯一的,就是在一个索引的多个类型中,如果多个类型中的映射名称一样,则它必须是相同的类型。
例如:如果一个title字段同时存在于user和 blogpost映射类型中,title字段在每个类型中必须拥有相同的映射。这个规则的唯一例外是:对于 copy_to参数、dynamic参数、enabled参数、ignore_above参数, include_in_all参数,每个不同映射类型中的字段拥有不
同的参数设置。
通常,相同名称的字段由相同类型的数据构成,所以拥有相同的索引是没有问题的。当产生类型冲突的时候,可以选择更详细的命名,比如 user_title和 blog_title。
当创建索引的时候,可以指定映射:
上面的接口表示创建一个名为 secisland的索引,在索引中添加名为user和 blogpost的映射类型。user映射类型取消元字段_all,指定了每个映射类型的字段或属性,指定了每个字段的数据类型和映射。
Elasticsearch支持一系列不同的数据类型来定义文档字段,分为核心数据、复杂数据、地理数据、专门数据类型。
核心数据类型包括:
复杂数据类型包括:
地理数据类型包括:
专门数据类型包括:
字符串数据类型的字段接受文本值,可以分为如下两种:
字符串数据类型的字段可以接受的参数如表3-1所示。
数字型数据类型支持的数字类型如表3-2所示。
JSON没有日期型数据类型,所以在 Elasticsearch中,日期可以是
通常,日期被转换为UTC(如果时区被指定)但是存储为代表时间毫秒数的长整数。
可以自定义时间格式,如果没有指定格式,则使用默认值:"strict_ date_optional_time || epoch_millis"
这意味着接受任意时间戳的日期值,例如:
(1)多日期格式
使用双竖线(||)分隔,可以指定多个日期格式。每个格式会被依次尝试,直到找到匹配的格式。第一个格式会用于将时间毫秒数值转换为字符串:
(2)日期型数字的字段参数
日期型数据的字段参数参见表3-4。
布尔型字段接受true或 false值,也可以接受代表真或假的字符串和数字:
索引词聚合之类的聚合使用1和0作为key,使用字符串“true”和“ false”作为key_as_string。使用脚本时,布尔字段返回1和0。布尔型字段参数见表3-5。
二进制数据类型接受Base64编码字符串的二进制值。字段不以默认方式存储而且不能搜索:
Base64编码二进制值不能嵌入换行符\n。二进制数据类型的字段参数如下所示:
在 Elasticsearch中,没有专门的数组类型。每个字段默认可以包含零个或更多的值,然而,数组中所有的值都必须是相同的数据类型。例如
注意无法对数组中的每一个对象进行单独的查询。
当动态添加字段的时候,数组中第一个元素的值决定了字段类型,随后的所有值必须是相同的数据类型或者可以强制转换为相同的数据类型。
Elasticsearch不支持混合数据类型的数组,比如:[10,"some string"]
数组可能包含null值,会被 null_value配置替换掉或者忽略掉。一个空数组囗被当作缺失字段——没有值的字段。
JSON文档是天然分层的:文档可以包含内部对象。同样,内部对象也可以包含内部对象。
上面文档的映射结构为:
映射类型是一种对象类型,拥有参数字段, manager字段是一个内部对象字段, manager.name字段是 manager字段中的内部对象字段。可以明确地设置type字段为 object((默认值)。
对象数据类型的参数如下所示:
嵌套数据类型是对象数据类型一个专门的版本,用来使一组对象被单独地索引和查询。
(1)对象数组是如何摊平的
Lucene没有内部对象的概念,所以 Elasticsearch利用简单的列表存储字段名和值,将对象层次摊平。例如,下面的文档:
user. first和 user. last字段存在多值字段中, alice和 white的关联性丢失了。这个文档可能错误地匹配到关于 alice和 smith的查询。
(2)对一组对象使用嵌套字段
如果需要对一组对象进行索引而且保留数组中每个对象的独立性,可以使用嵌套数据类型而不是对象数据类型。本质上,嵌套对象将数组中的每个对象作为分离出来的隐藏文档进行索引。这也意味着每个嵌套对象可以独立于其他对象被查询,示例如下。
创建的映射如下所示
user字段作为嵌套类型添加到索引中。搜索1匹配不到结果,因为Aice和 Smith不在同一个嵌套对象中;搜索2匹配到搜索结果,因为Alc和 White在同一个嵌套对象中。
嵌套数据类型的字段参数如下所示:
地理点数据类型字段接受经纬度对,可用于:
指定字段类型为地理位置数据类型:
存储地理位置数据有4种不同方式。下面分别介绍。
字符串地理点参数顺序为(纬度,经度),地理点数组参数的顺序为(经度,纬度)。地理点数据字段参数见表3-6。
地理形状数据类型有利于索引和搜索任意地理形状,例如矩形和多边形。无论是数据被索引还是在查询执行的过程中,都可以使用地理形状数据类型在地理点的基础上包含地理形状。
利用地理形状查询(geo_shape)来查询文档,可以使用地理形状数据类型。
(1)映射选项
地理形状类型映射将 geo_json几何对象映射成地理形状类型。为了启用映射选项,需要明确映射字段为地理形状类型,参见表3-7。
(2)前缀树
在索引中高效地表示形状,形状被转换到一系列表示为方格(通常被称为“栅格”)的散列用于实现一个前缀树。树的概念来自该前缀树使用多层网格,每层增加精度级别来表示陆地。这可以提高地图的缩放级别或图像的细节水平。
(3)空间策略
前缀树的实现基于空间策略用来分解提供的形状为近似方格。每个策略解决这些问题
提供的这些策略实现(具有相应的功能)见表3-8。
(4)准确性
地理形状不提供100%的准确性,并且取决于匹配值,可能对确定的查询返回一些误判或漏判的结果。为了缓和这个问题,需要为tree_levels参数选择一个合适的值来适应相应的预期。
例如:
这个映射将 location字段映射到地理形状类型,使用quad前缀树并且精度为1m。Elasticsearch转换这个精度到 tree_levels设置为26。
(5)性能方面的考虑
Elasticsearch使用前缀树中的路径作为索引和查询中的索引词。更高级别的精确值,会生成更多的索引词。计算索引词、加载到内存、保存到磁盘也需要额外的性能花销。
索引大小和合理水平的精确值的折中是50m。
(6)输入结构
用于表示形状的 GeoJSON格式见表3-9:
下面举例说明这些格式。
Point是一个单独的地理坐标点,比如当前建筑的位置或者智能手机地理定位接口提供的确切位置。
Linestring通过两个或更多的一组位置定义。只指定两个点, Linestring会表示一条直线。指定更多的点,可以创建任意的线。
Polygon通过一列地理点列表进行定义。每个列表(外环)中的第一个点和最后一个点必须相同(多边形必须是封闭的)。
orientation参数可以在地理形状数据类型字段创建映射的时候进行定义,规定顶点的顺序。也可以在每个文档中进行重写。
(7)排序和取回形状索引
由于形状复杂的输入结构和索引表示,当前不能直接通过字段排序或取回形状。地理形状值只能通过 source字段取回。
IPv4字段本质上是一个长整型字段,接受IPv4地址并作为长整型值进行索引。
添加映射
插入数据
IPv4数据类型的字段参数见表3-10。
单词计数型字段本质上是一个整数型字段,接受并分析字符串值,然后索引字符串中单词的个数。下面举例说明。
添加映射
严格来说,单词计数类型计算位置增量而不是统计单词。这意味着即使分析器过滤掉部分单词,它们也会被包含在计数中。单词计数类型的字段参数如表3-11所示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。