-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
194 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,13 @@ | ||
![](img/20220127134641.png) | ||
|
||
## 安装 | ||
- [elasticsearch 安装教程](basics/install_elasticsearch.md) | ||
- [🔖 elasticsearch 安装教程](basics/install_elasticsearch.md) | ||
|
||
## ElasticSearch 常用语法命令 | ||
- [elasticsearch 对索引增删改](basics/insert_update_delete.md) | ||
- [elasticsearch 常用查询表达式](basics/query_dsl.md) | ||
- [elasticsearch 批量操作常用API](basics/batch.md) | ||
- [elasticsearch 聚合查询](basics/agg.md) | ||
- [🔖 elasticsearch中常用的数据类型大全](basics/datatype.md) | ||
- [🔖 elasticsearch 对索引增删改](basics/insert_update_delete.md) | ||
- [🔖 elasticsearch 常用查询表达式](basics/query_dsl.md) | ||
- [🔖 elasticsearch 批量操作常用API](basics/batch.md) | ||
- [🔖 elasticsearch 聚合查询](basics/agg.md) | ||
|
||
## ElasticSearch 高级 | ||
- [🔖 elasticsearch mapping](basics/mapping.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
# Mapping 简介 | ||
|
||
映射是定义文档及其包含的字段的存储和索引方式的过程。例如,使用映射来定义: | ||
|
||
- 哪些字符串字段应被视为全文字段。 | ||
- 哪些字段包含数字、日期或地理位置。 | ||
- 日期值的格式。 | ||
- 用于控制动态添加字段的映射的自定义规则。 | ||
|
||
映射定义具有: | ||
|
||
- **元数据字段** | ||
|
||
元数据字段用于自定义如何处理文档的关联元数据。元数据字段的示例包括文档的`_index`、`_source`、`_id`字段。 | ||
|
||
- **字段或属性** | ||
|
||
映射包含与文档相关的字段列表或字段列表。`properties` | ||
|
||
## 字段数据类型 | ||
|
||
每个字段都有一个数据,可以是:`type` | ||
|
||
- 一个简单的类型,如`text, keyword, date, long, double, boolean or ip`. | ||
- 支持 JSON 的分层特性(如` object or nested`).类型。 | ||
- 或特殊类型,如`geo_point`、`geo_shape`或`completion`。 | ||
|
||
出于不同目的,以不同的方式为同一字段编制索引通常很有用。例如,可以将字段索引为用于全文搜索的字段,以及作为用于排序或聚合的字段。或者,您可以使用标准分析器、英语分析器和法语分析器为字符串字段编制索引 | ||
|
||
## 防止映射explosion的设置 | ||
|
||
在索引中定义太多字段可能会导致映射explosion,从而导致内存不足错误和难以恢复的情况。 | ||
|
||
请考虑插入的每个新文档都会引入新字段的情况,例如动态映射。每个新字段都会添加到索引映射中,随着映射的增长,这可能会成为一个问题。 | ||
|
||
使用以下设置来限制字段映射(手动或动态创建)的数量,并防止文档导致映射explosion: | ||
|
||
- **`index.mapping.total_fields.limit`** | ||
|
||
索引中的最大字段数。字段和对象映射以及字段别名会计入此限制。缺省值为 `1000` | ||
|
||
> 该限制已到位,以防止映射和搜索变得太大。较高的值可能会导致性能下降和内存问题,尤其是在具有高负载或资源较少的群集中。 | ||
> | ||
> 如果增加此设置,我们还建议你增加 `indices.query.bool.max_clause_count` 设置,这将限制查询中`boolean clauses` 的最大数目。 | ||
|
||
- **index.mapping.depth.limit** | ||
|
||
最大深度,以内部对象的数量来测量。例如,如果所有字段都是在根对象级别定义的,则深度为1 。如果有一个对象映射,则深度为 2,依此类推。默认值为20 。 | ||
|
||
- **`index.mapping.nested_fields.limit`** | ||
|
||
索引中不同映射的最大数目。该类型应仅在特殊情况下使用,当对象数组需要彼此独立地查询时。为了防止映射设计不当,此设置限制了每个索引的唯一类型数。默认值为 50 。 | ||
|
||
- **`index.mapping.nested_objects.limit`** | ||
|
||
单个文档在所有类型中可以包含的最大嵌套 JSON 对象数。此限制有助于防止在文档包含太多嵌套对象时出现内存不足错误。默认值为 10000 。 | ||
|
||
- **`index.mapping.field_name_length.limit`** | ||
|
||
设置字段名称的最大长度。此设置实际上并不能解决映射爆炸问题,但如果要限制字段长度,此设置可能仍然很有用。通常不需要设置此设置。默认值是可以的,除非用户开始添加大量具有非常长名称的字段。默认值为(无限制 `Long.MAX_VALUE`) | ||
|
||
## 动态映射 | ||
|
||
字段和映射类型在使用之前不需要定义。由于*动态映射*,只需为文档编制索引,即可自动添加新的字段名称。新字段既可以添加到顶级映射类型中,也可以添加到内部[`对象`]和[`嵌套`]字段中。 | ||
|
||
可以配置动态映射规则以自定义用于新字段的映射。 | ||
|
||
## 显式映射 | ||
|
||
您对数据的了解比 Elasticsearch 所能猜到的要多,因此,虽然动态映射对于入门很有用,但在某些时候,您将需要指定自己的显式映射。 | ||
|
||
您可以在创建[索引时创建]字段映射,并将[字段添加到现有索引]。 | ||
|
||
## 创建具有显式映射的索引 | ||
|
||
可以使用[创建索引]API 创建具有显式映射的新索引。 | ||
|
||
``` | ||
PUT /my-index-000001?pretty | ||
{ | ||
"mappings": { | ||
"properties": { | ||
"age": { | ||
"type": "integer" | ||
}, | ||
"email": { | ||
"type": "keyword" | ||
}, | ||
"name": { | ||
"type": "text" | ||
} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
## 向现有映射添加字段 | ||
|
||
您可以使用 put 映射 API 将一个或多个新字段添加到现有索引。 | ||
|
||
下面的示例添加了employee id,这是一个索引映射参数值为false的关键字字段。这意味着将存储employee id字段的值,但不会编制索引或用于搜索。 | ||
|
||
```console | ||
PUT /my-index-000001/_mapping | ||
{ | ||
"properties": { | ||
"employee-id": { | ||
"type": "keyword", | ||
"index": false | ||
} | ||
} | ||
} | ||
``` | ||
|
||
### 更新字段的映射 | ||
|
||
除支持的映射参数外,您无法更改现有字段的映射或字段类型。更改现有字段可能会使已编制索引的数据失效。 | ||
|
||
如果需要更改字段的映射,请使用正确的映射创建一个新索引,然后将数据[重新索引]()到该索引中。 | ||
|
||
重命名字段会使已在旧字段名称下编制索引的数据失效。相反,请添加[`别名`]()字段以创建备用字段名称。 | ||
|
||
## 查看索引的映射 | ||
|
||
可以使用[获取映射]() API 查看现有索引的映射。 | ||
|
||
``` | ||
curl -X GET "localhost:9200/my-index-000001/_mapping?pretty" | ||
``` | ||
|
||
API 将返回以下响应: | ||
|
||
```console-result | ||
{ | ||
"my-index-000001" : { | ||
"mappings" : { | ||
"properties" : { | ||
"age" : { | ||
"type" : "integer" | ||
}, | ||
"email" : { | ||
"type" : "keyword" | ||
}, | ||
"employee-id" : { | ||
"type" : "keyword", | ||
"index" : false | ||
}, | ||
"name" : { | ||
"type" : "text" | ||
} | ||
} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
|
||
|
||
## 查看特定字段的映射 | ||
|
||
如果只想查看一个或多个特定字段的映射,则可以使用 [get 字段映射]() API。 | ||
|
||
如果您不需要索引的完整映射,或者索引包含大量字段,这将非常有用。 | ||
|
||
API 将返回以下响应: | ||
|
||
```console-result | ||
{ | ||
"my-index-000001" : { | ||
"mappings" : { | ||
"employee-id" : { | ||
"full_name" : "employee-id", | ||
"mapping" : { | ||
"employee-id" : { | ||
"type" : "keyword", | ||
"index" : false | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
``` |