ElasticSearch重建/创建/删除索引操作 - 第501篇

科技   2024-01-30 08:30   福建  

计500+
Spring Boot
Spring Boot
Spring Boot
Spring Boot
Spring Boot

Spring Boot

Elasticsearch可视化平台Kibana [ES系列] - 第498篇
Elasticsearch安装分词插件[ES系列] - 第499篇
ElasticSearch扫盲概念篇[ES系列] - 第500篇


导读

Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

这一节来看看ES的索引的基本操作 增删改查。

一、索引操作

1.1 创建索引

格式: PUT /索引名称

索引命名规范:

· 以小写英文字母命名索引

· 不要使用驼峰命名法则

· 如过出现多个单词的索引名称,以全小写 + 下划线分隔的方式:如test_index

ES 索引创建成功之后,以下属性将不可修改

· 索引名称

· 主分片数量

· 字段类型

举例说明:

#创建索引

PUT /es_db


1.2查询索引

格式: GET /索引名称

#查询索引

GET /es_db


1.3删除索引

格式: DELETE /索引名称

DELETE /es_db

二、设置 Settings

创建索引的时候指定 settings

PUT <index_name>{  "settings": {}}

创建索引时可以设置分片数和副本数

#创建索引es_db,指定其主分片数量为 3,每个主分片的副本数量为 2PUT /es_db{  "settings": {    "number_of_shards": 3,    "number_of_replicas": 2  }}


说明:

1)静态索引设置:只能在创建索引时或在关闭状态的索引上设置。

- index.number_of_shards:索引的主分片的个数,默认为 1,此设置只能在创建索引时设置。

2)动态索引设置:即可以使用 _setting API 在实时修改的配置项。

- index.number_of_replicas:每个主分片的副本数。默认为 1,允许配置为 0

- index.refresh_interval:执行刷新操作的频率,默认为1s. 可以设置 -1 为禁用刷新。

- index.max_result_windowfrom + size 搜索此索引 的最大值,默认为 10000

使用 _setting 只能修改允许动态修改的配置项

#修改索引配置,把每个主分片的副本数量修改为 1PUT /es_db/_settings{"index" : {"number_of_replicas" : 1}}

创建索引时可以指定IK分词器作为默认分词器

PUT /es_db{  "settings" : {    "index" : {      "analysis.analyzer.default.type": "ik_max_word"    }  }}

三、设置文档映射Mapping

ES 中的 mapping 有点类似与关系数据库中表结构的概念,在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在 ES 中一个字段可以有多个类型。ESMapping可以分为动态映射和静态映射

#查看完整的索引 mappingGET /<index_name>/_mappings
#查看索引中指定字段的 mappingGET /<index_name>/_mappings/field/<field_name>

mapping 的使用禁忌

· ES 没有隐式类型转换

· ES 不支持类型修改

· 生产环境尽可能的避免使用 动态映射(dynamic mapping

3.1动态映射

在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映射,在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射

示例:

#删除原索引DELETE /user
#创建文档(ES根据数据类型, 会自动创建映射)PUT /user/_doc/1{ "name": "fox", "age": 32, "address":"长沙麓谷"}
#获取文档映射GET /user/_mapping


3.2静态映射

静态映射也叫做显式映射,即:在索引文档写入之前,人为创建索引并且指定索引中每个字段类型、分词器等参数。

PUT /user{  "settings": {    "number_of_shards": "1",    "number_of_replicas": "1"  },  "mappings": {    "properties": {      "name": {        "type": "keyword"      },      "age" : {        "type" : "long"      },      "address" : {        "type" : "text"      }    }  }}


3.3常用Mapping参数配置

参数名称

释义

analyzer

指定分析器,只有 text 类型字段支持。

copy_to

该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询

dynamic

控制是否可以动态添加新字段,支持以下四个选项:

true:(默认)允许动态映射

false:忽略新字段。这些字段不会被索引或搜索,但仍会出现在_source返回的命中字段中。这些字段不会添加到映射中,必须显式添加新字段。

runtime:新字段作为运行时字段添加到索引中,这些字段没有索引,是_source在查询时加载的。

strict:如果检测到新字段,则会抛出异常并拒绝文档。必须将新字段显式添加到映射中。

doc_values

为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值以节省磁盘空间(不支持 text annotated_text

eager_global_ordinals

用于聚合的字段上,优化聚合性能。

enabled

是否创建倒排索引,可以对字段操作,也可以对索引操作,如果不创建索引,任然可以检索并在_source元数据中展示,谨慎使用,该状态无法修改。

fielddata

查询时内存数据结构,在首次用当前字段聚合、排序或者在脚本中使用时,需要字段为fielddata数据结构,并且创建倒排索引保存到堆中

fields

field 创建多字段,用于不同目的(全文检索或者聚合分析排序)

format

用于格式化代码,如

"data":{ "type": "data", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" }

index

是否对创建对当前字段创建倒排索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中展示。

norms

是否禁用评分(在filter和聚合字段上应该禁用)

null_value

null 值设置默认值

search_analyzer

设置单独的查询时分析器

示例:

- index: 控制当前字段是否被索引,默认为true。如果设置为false,该字段不可被搜索

DELETE /userPUT /user{  "mappings" : {    "properties" : {      "address" : {        "type" : "text",        "index": false      },      "age" : {        "type" : "long"      },      "name" : {        "type" : "text"      }    }  }}
PUT /user/_doc/1{ "name":"fox", "address":"广州白云山公园", "age":30}
GET /user
GET /user/_search{ "query": { "match": { "address": "广州" } }}

四、使用ReIndex重建索引

具体方法:

具体方法:

1)如果要推倒现有的映射, 你得重新建立一个静态索引       

2)然后把之前索引里的数据导入到新的索引里       

3)删除原创建的索引       

4)为新索引起个别名, 为原索引名   

通过这几个步骤可以实现了索引的平滑过渡,并且是零停机

# 1. 重新建立一个静态索引PUT /user2{  "mappings": {    "properties": {      "name": {        "type": "text"      },      "address": {        "type": "text",        "analyzer": "ik_max_word"      }    }  }}
# 2. 把之前索引里的数据导入到新的索引里POST _reindex{ "source": { "index": "user" }, "dest": { "index": "user2" }}# 3. 删除原创建的索引DELETE /user# 4. 为新索引起个别名, 为原索引名PUT /user2/_alias/user
GET /user


à悟纤https://t.cn/Rg3fKJD

Spring Boot

SpringBoothttp://t.cn/A6ZagYTi

SpringBoothttps://t.cn/R3QDhU0

SpringSecurity5.0http://t.cn/A6ZadMBe

ShardingJDBC分库分表http://t.cn/A6ZarrqS

分布式事务解决方案http://t.cn/A6ZaBnIr

JVM内存模型http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

SpringBoot
Suno AI制作音乐,Viggle AI - 照片跳舞,AI音乐,Noisee AI制作MV。Spring Boot技术。博客已有400+,文章特色:一个知识点一个系列、让技术变得简单、文章轻松幽默,悟纤和师傅趣谈更是轻松有趣。
 最新文章