1.映射(Mapping)
可以理解为对文档及其字段进行索引或存储的方式。
可以拿Mapping和关系型数据库中的schema类比,schema在关系型数据库中指:库表包含的字段及字段存储类型等基础信息。
下文中映射等价于Mapping。
Elasticsearch映射,描述了文档可能具有的字段、属性、每个字段的数据类型以及Lucene是如何索引和存储这些字段的。
例如,使用映射定义:
·哪些字符串字段应视为全文字段。
·哪些字段包含数字、日期或地理位置。
日期值的格式。
自定义规则来控制动态添加字段的映射
映射定义由以下两部分组成:
·元字段(Meta-fields)
·数据类型字段
元字段用于自定义如何处理文档的相关元数据。
元字段的示例包括文档的index,type,id和source字段
2.1 元字段
各种元字段,它们都以一个下划线开头,例如_type、_id 和_source。
2.1.1 ldentity 元字段
index:表示它所属的文档的索引。
·uid:type和 id的组合键,
·id:表示文档的ID。
2.1.2 文档源元字段
source:表示代表文档正文的原始JSON对象·size:它表示source字段的大小(以字节为单位)
2.1.3 索引元字段
·field names:表示给定文档中包含非空值的所有字段。
·timestamp:与每个文档相关联的手动或自动生成的时间戳
·tt:表示应该保持活动状态的时间,之后该时间将被删除。
3.数据字段
每个字段都有一个字段数据类型或字段类型。此类型表示 类型的数据,例如字符串或布尔值,以及其预期用途。
字段类型按系列分组。同一系列中的类型恰好具有相同的搜索行为,但空间使用量或性能可能不同特性。
3.1常见类型
3.1.1 binary
编码为 Base64 字符串的二进制值。
3.1.2 boolean
true和价值观。false
3.1.3 关键字
关键字系列,包括keywordconstant和keywordwildcard
3.1.4 数字
数字类型(如 和 )用于 快递金额。long double
3.1.5 日期
日期类型,包括 date 和 date_nanos。
3.1.6 alias
定义现有字段的别名。
3.1.7 对象和关系类型
object
JSON 对象。
3.1.8 flattened
将整个 JSON 对象作为单个字段值。
3.1.9 nested
保留关系的 JSON 对象 在其子字段之间。
3.1.10 join
定义文档的父/子关系 在同一索引中。
3.2结构化数据类型
3.2.1 范围
范围类型,例如long_rangedouble_range和date_rangeip_range
3.2.2ip
IPv4 和 IPv6 地址。
3.2.3 version
软件版本。支持语义版本控制优先规则。
3.2.4 murmur3
计算和存储 值。
3.3聚合数据类型
3.3.1 aggregate_metric_double
预先聚合的指标值。
3.3.2 histogram
以直方图形式预先聚合的数值。
3.4 文本搜索类型
3.4.1文本字段
文本系列(包括test和match_only_text分析的非结构化文本。
3.4.2 annotated-text
包含特殊 标记。用于标识命名实体。
3.4.3 completion
用于自动完成建议。
3.4.5 search_as_you_type
text-like 类型 as-you-type 补全。
3.4.6 token_count
文本中的标记计数。
3.5 文档排名类型
3.5.1 dense_vector
记录 float 值的密集向量。
3.5.2 rank_feature
记录数字特征以提升命中率 查询时间。
3.5.3 rank_features
记录数字特征以提高命中率 查询时间。
3.6 空间数据类型
3.6.1 geo_point
纬度和经度点。
3.6.2 geo_shape
复杂形状,例如多边形。
3.6.3 point
任意笛卡尔点。
3.6.4 shape
任意笛卡尔几何图形。
3.7 其他类型
3.7.1 percolator
为 Query DSL 中编写的查询编制索引。
3.7.2 阵 列
在 Elasticsearch 中,数组不需要专用的字段数据类型。任何字段都可以包含 默认情况下为零或多个值,但是,数组中的所有值都必须为 相同的字段类型。请参阅 数组。
3.8 多字段
对于不同的 目的。例如,字段可以映射为 一个用于全文搜索的字段,以及作为 排序或聚合。或者,您可以使用 Standard Analyzer(标准分析器)、English (英语) 分析器和 French 分析器(French Analyzer)。stringtextkeyword
这就是 multi-fields 的目的。大多数字段类型都支持多字段 通过 fields 参数。
4 mapping参数
4.1 analyzer
该参数指定在为字段编制索引或搜索字段时用于文本分析的分析器。analyzertext
除非被 search_analyzer 映射覆盖 参数,则此分析器用于 index 和 搜索分析。
(https://www.elastic.co/guide/en/elasticsearch/reference/8.1/analyzer.html)
4.2 coerce
强制 (Coercion) 尝试清理脏值以适应字段的数据类型。 例如:
字符串将被强制转换为数字。
•整数值的浮点将被截断。
(https://www.elastic.co/guide/en/elasticsearch/reference/8.1/coerce.html)
4.3 copy_to
该参数允许您将多个字段的值复制到一个组字段中,然后可以将其作为单个字段进行查询。
(https://www.elastic.co/guide/en/elasticsearch/reference/8.1/copy-to.html)
4.4 doc_values
默认情况下,大多数字段都被索引,这使得它们可以搜索。倒排索引允许查询在唯一排序的术语列表中查找搜索词,并立即访问包含该术语的文档列表。
排序、聚合和访问脚本中的字段值需要不同的数据访问模式。我们需要能够查找文档并找到它在字段中的术语,而不是查找术语并查找文档。
文档值是磁盘上的数据结构,在文档索引时构建,这使得这种数据访问模式成为可能。它们以面向列的方式存储与但相同的值,这种方式对排序和聚合更有效。几乎所有字段类型都支持文档值,但文本和annotated_text字段除外。_source
4.5 dynamic
当您索引包含新字段的文档时,Elasticsearch会将该字段动态添加到文档或文档中的内部对象。以下文档在对象下添加了字符串字段、对象字段和两个字符串字段:username
5.动态映射(dynamic mappping)
Elasticsearch 最重要的功能之一是它尝试获取 让您尽快开始探索数据。 要为文档编制索引,您不必先创建索引,只需定义映射 type 并定义您的字段 — 您只需为文档和索引 type 和 fields 将自动显示:
新字段的自动检测和添加称为动态映射。可以自定义动态映射规则以满足您的目的:
Dynamic field mappings
控制动态场检测的规则。
Dynamic templates
为动态添加的字段配置映射的自定义规则。
5.1 Dynamic field mapping
当 Elasticsearch 在文档中检测到新字段时,它会动态地将该字段添加到 默认情况下是 type 映射。dynamic 参数控制此行为。
您可以显式指示 Elasticsearch 根据传入 文档,方法是将参数设置为 或 。什么时候 dynamic field mapping 时,Elasticsearch 会使用下表中的规则来 确定如何映射每个字段的数据类型。