ES 映射
Elasticsearch 为其用户提供了一种映射机制。它允许用户对文档及其字段执行映射。映射是索引或存储数据库中的文档和字段的过程。它定义了文档及其字段的存储和索引方式。
我们可以为不同类型的字段定义数据类型,例如-字符串、数字、geo_point 等。因此,要将数字字段视为数字,字符串字段作为全文或精确值字符串,日期字段作为日期,Elasticsearch 需要知道每个字段的数据类型。此信息存储在映射中。下面是一些关于映射需要注意的要点:
- 映射允许我们定义字段的数据类型,例如名称字段的字符串数据类型。
- 它指定文档中提供的字段的格式。
- 映射还用于配置与类型关联的元数据。
下面的例子将向您展示一个简单映射的演示,其中我们将创建一个名为books with mapping的索引:
POST http://localhost:9200/books/_docs { "mappings": { "type1": { "_source": { "enabled": false }, "properties": { "book_name": {"type":"string"}, "author_name": {"type":"string"}, "price": {"type":"float"}, "publisher": {"type":"string"}, "published_date": {"type":"date"} } } } }
回复
{ "acknowledged": true, "shards_acknowledged": true, "index": "books" }
屏幕截图
数据类型
Elasticsearch 支持不同字段的各种数据类型。让我们简要讨论每种数据类型:
核心数据类型: 这些是广泛使用的基本数据类型。一些核心数据类型是-short、integer、long、float、double、string、byte、Boolean 和 date。大多数系统都支持这些数据类型。
复杂数据类型: 复杂数据类型是用户定义的数据类型,它是核心数据类型的集合。复杂的数据类型是-数组、JSON 对象(本质上是分层的)和嵌套数据类型。
Geo 数据类型: Geo 数据类型是一种特殊的数据类型,用于存储地理详细信息,例如地点的位置。例如:
- geo_point 有助于识别经度和纬度。
- geo_shape 有助于定义不同的几何形状,如矩形。
专用数据类型: 这些数据类型是专用数据类型,用于保存唯一的详细信息,例如 IP 地址、用于计算字符串中标记数量的 token_count 以及自动完成
映射类型
每个索引都有不止一种映射类型,这进一步将索引的文档划分为逻辑组或块。
映射可能因字段和元字段等某些因素而彼此不同。
字段或属性: 字段也被视为属性。在 elasticsearch 中,不同的映射具有不同数据类型的各种字段。在索引中,名称相同但映射类型不同的字段必须具有相同的映射。
元字段: 元字段使有关映射以及其他对象的信息可用与它相关联,例如 _index、_id、_source 和 _type 字段。他们负责自定义如何处理与文档关联的元数据。
动态映射:
Elasticsearch 提供了一种自动创建映射的机制。这种用户友好的机制称为动态映射。它允许用户将数据直接发布到任何未定义的映射。然后 Elasticsearch 会自动为其创建映射。
静态映射:
在大多数情况下,我们已经知道保存在文档中的数据类型。因此,每当我们创建索引时,定义字段及其类型就变得容易了。这种机制称为静态映射,由用户在创建索引时创建。
映射参数
映射参数是定义映射的基本和基本因素。它们还有助于存储数据的关键——字段和存储。映射参数负责在搜索时如何分析这些细节。在 Elasticsearch 中,以下是映射参数:
- analyzer
- boost
- coerce
- copy_to
- doc_values
- dynamic
- enabled
- fields
- fielddata
- format
- geohash
- geohash_prefix
- geohash_precision
- ignore_above
- ignore_malformed
- include_in_all
- Index_options
- lat_lon
- norms
- null_value
- position_increment_gap
- properties
- search_analyzer
- similarity
- store
- team_vector
获取索引的映射细节
以下命令用于获取与索引关联的映射:
GET http://localhost:9200/student1/ _mapping?include_type_name=false
响应:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "student": { "mappings": { "properties": { "Addmission_year": { "type":"text", "fields": { "keyword": { "type": "keyword" "ignore_above": 256 } } }, "country": { "type":"text", "fields": { "keyword": { "type": "keyword" "ignore_above": 256 } } }, "course": { "type":"text", "fields": { "keyword": { "type": "keyword" "ignore_above": 256 } } }, "email": { "type":"text", "fields": { "keyword": { "type": "keyword" "ignore_above": 256 } } }, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
截图
移除映射类型
Elasticsearch 7.0.0 及更高版本不支持索引的 _default_ 映射。但是,在 Elasticsearch 6.x 中创建的索引将继续像以前一样工作。 Elasticsearch 7.0 版本的 API 中不推荐使用类型。