ElasticSearch Mapping详解与示例

5星 · 超过95%的资源 3 下载量 159 浏览量 更新于2024-08-29 收藏 440KB PDF 举报
"ElasticSearch Mapping" 在Elasticsearch中,Mapping是一个至关重要的概念,它定义了索引中文档的结构以及字段的数据类型。Mapping允许我们控制数据如何被索引和搜索,从而优化搜索性能和结果准确性。以下是关于Elasticsearch Mapping的详细解释: 一、Mapping介绍 1)什么是Mapping? 在Elasticsearch 7.0版本及以上,Mapping是指文档结构的定义,包括每个字段的名称、数据类型和相关设置。不同于传统的数据库表结构,Elasticsearch的Mapping更加灵活,能够处理各种类型的数据。 2)字段类型 Elasticsearch支持多种字段类型,除了基本的整数、浮点数、字符串和布尔值,还包括IP地址、日期、地理位置等特殊类型。这些丰富的类型让Elasticsearch能处理各种复杂的数据。 3)什么是Dynamic Mapping? Dynamic Mapping是Elasticsearch的一种特性,当新文档包含未在现有Mapping中定义的字段时,系统会自动为其创建一个默认的Mapping。这使得快速地导入新数据变得简单,但如果不恰当,可能会导致字段类型不匹配或索引问题。 4)Mapping类型的自动识别 Elasticsearch根据字段值自动推断字段类型。例如,数字值将被识别为数值类型,日期字符串将被识别为日期类型。 5)通过设置dynamic控制Dynamic Mapping 可以使用`dynamic`参数来控制动态映射的行为。默认情况下,它是`true`,意味着允许动态映射。设置为`false`则禁止新的字段自动映射,防止数据意外地被错误地索引。 二、Demo 7)常规Mapping添加删除 在示例中,我们创建了一个名为`mapping_test`的索引,并写入了一篇包含`firstName`、`lastName`和`loginDate`字段的文档。接着,通过`GET mapping_test/_mapping`命令查看了Mapping。然后,删除了该索引。 8)dynamic mapping,推断字段的类型 在另一个示例中,我们创建了`mapping_test`索引,并插入包含不同字段的文档。Elasticsearch自动为`uid`(字符串)、`isVip`(布尔值)、`isAdmin`(字符串)、`age`(整数)和`height`(整数)字段创建了Mapping。使用`GET mapping_test/_mapping`查看了动态生成的Mapping。 9)dynamic设置为false情况 当我们将`dynamic`设置为`false`,尝试向索引中添加新的字段`newField`,Elasticsearch不会为这个字段创建Mapping。但是,由于之前`dynamic_mapping_test`的`dynamic`默认为`true`,`newField`在旧文档中依然可以被搜索和出现在`_source`中。 10)dynamic设置为false后的新字段处理 当我们把`dynamic_mapping_test`的`dynamic`设置为`false`,再尝试添加新字段`anotherField`,Elasticsearch不会为其创建Mapping,因此`anotherField`不会被索引,也无法在搜索中使用。 总结来说,Elasticsearch的Mapping提供了强大的灵活性和控制力,可以根据需求精确配置文档结构,同时动态Mapping的特性使得数据导入更加便捷。然而,需要注意动态映射的潜在问题,适时调整`dynamic`设置以保持索引的稳定性和一致性。