简单的说
- settings是修改分片和副本数的。
- mappings是修改字段和类型的。
可以用url方式来操作它们,建议。
1、ES中的settings查询索引库的settings信息
PUT /my_index
{
"settings": {
"index": {
"creation_date": "1618640626017", # 顾名思义索引的创建时间戳
"uuid": "dINnupzNSf27KsfOO-69eg", # 索引的 uuid 信息
"version": {
"created": "7040299" # 索引的版本号
},
"number_of_shards": "1", # 索引的主分片数,默认值是 51024。
"number_of_replicas": "1", # 索引主分片的副本数,默认值是 1,
"provided_name": "article_news_2019-01" , #
"refresh_interval": "60s", # 执行新索引数据的刷新操作频率
"analysis": {
# 定制化分析器
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"char_filter": [
"emoticons"
],
"tokenizer": "punctuation",
"filter": [
"lowercase",
"english_stop"
]
}
},
# 自定义分词器
"tokenizer": {
"punctuation": {
"type": "pattern",
# 遇到以下的字符,则分词
"pattern": "[ .,!?]"
}
},
# 字符过滤器
"char_filter": {
"emoticons": {
"type": "mapping",
# 将图形符号翻译为其他映射
"mappings": [
":) => _happy_",
":( => _sad_"
]
}
},
# 分词过滤器
"filter": {
"english_stop": {
# 定义根据停止次过滤,_english_为默认的英语停止词集
"type": "stop",
"stopwords": "_english_"
}
}
}
}
索引静态配置
只能在索引创建时或者在状态为 closed index(闭合的索引)上设置
- index.analysis:文本分析是指将文本进行特定的过滤、分词和转换的过程,最外层的配置项,内部主要分为 char_filter、tokenizer、filter 和 analyzer。
- char_filter:定义新的字符过滤器件。
- tokenizer:定义新的分词器。
- filter:定义新的 token filter,如同义词 filter。
- analyzer:配置新的分析器,一般是char_filter、tokenizer 和一些 token filter 的组合。
- index.number_of_shards:索引的主分片数,默认值是 5。这个配置在索引创建后不能修改;在 es 层面,可以通过 es.index.max_number_of_shards 属性设置索引最大的分片数,默认为 1024。
- index.codec:数据存储的压缩算法,默认值为 LZ4,可选择值还有 best_compression,它比 LZ4 可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比 LZ4 低)。
- index.routing_partition_size:路由分区数,如果设置了该参数,其路由算法为:( hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(_routing) % number_of_shardings,_routing 默认值为 _id。
索引动态配置
- index.number_of_replicas:索引主分片的副本数,默认值是 1,该值必须大于等于 0,这个配置可以随时修改。
- index.refresh_interval:执行新索引数据的刷新操作频率,该操作使对索引的最新更改对搜索可见,默认为 1s。也可以设置为 -1 以禁用刷新。更详细信息参考 Elasticsearch 动态修改 refresh_interval 刷新间隔设置。
映射指的是 mapping,用来定义一个文档以及其所包含的字段如何被存储和索引, 可以在映射中事先定义字段的数据类型、字段的权重、分词器等属性,就如同在关系型数据库中创建数据表时会设置字段的类型。Elasticsearch 中一个字段可以是核心类型之一,如字符串或者数值型,也可以是一个从核心类型派生的复杂类型,如数值。
静态映射静态映射是在创建索引时手工指定索引映射,和 SQL 中在建表语句中指定字段属性类似。相比动态映射,通过静态映射可以添加更详细、更精准的配置信息
动态映射
Elasticsearch 自动识别的,不需要在创建索引的时候设置字段的类型。在实际项目中,如果遇到的业务在导入数据之前不确定有哪些字段,也不清楚字段的类型是什么,使用动态映射非常合适。当 Elasticsearch 在文档中碰到一个以前没见过的字段时,它会利用动态映射来决定该字段的类型,并自动把该字段添加到映射中,根据字段的取值自动推测字段类型的规则见下表:
Elasticsearch 自动推测字段类型的规则
| JSON 格式的数据 | 自动推测的字段类型 |
|---|---|
| null | 没有字段被添加 |
| true or false | boolean 类型 |
| 浮点类型数字 | float 类型 |
| 数字 | long 类型 |
| JSON 对象 | object 类型 |
| 数组 | 由数组中第一个非空值决定 |
| string | 有可能是 date 类型(若开启日期检测)、double 或 long 类型、text 类型、keyword 类型 |
在 mapping 中可以通过 dynamic 设置来控制是否自动新增字段,接受以下参数:
- true:默认值为 true,自动添加字段。
- false:忽略新的字段。
- strict:严格模式,发现新的字段抛出异常。
核心类型有字符串类型、数字类型、日期类型、布尔类型、二进制类型、范围类型



