参考链接: Index api: Index APIs | Elasticsearch Guide [7.13] | Elastic
ES Index Define
提到ES索引的定义,就不得不提到下面几个名词:
Settings:
定义一些ES系统配置,包括动态和静态Setting,可以在创建索引时指定,也可以在索引创建后修改动态settings.
静态settings 指在创建了Index之后就不允许更改了,如果需要更改,则需要重新创建索引进行reindex。
项目中用到的静态配置:
index.number_of_shards Index主分片数量,默认是1,最大是1024
项目中用到的动态配置:
index.number_of_replicas 副本数量
index.max_result_window scroll查询 doc最大返回数量,默认10000,业务需要每次取100000
index.refresh_interval refresh时间间隔,每refresh一次会生成一个段,默认为1s,进实时搜索从此而来
Mapping:
相当于表结构,包括动态和静态Mapping,可以在创建索引时指定,也可以在索引创建后进行修改, mapping可以定义如下配置:
字段名
字段类型
其他参数,如分词器:
Mapping parameters | Elasticsearch Guide [7.13] | Elastic
alias:
索引别名,可以在创建索引时指定,也可以在索引创建后添加.
一个索引可以有多个别名
一个别名也可以对应多个索引
别名只用来查询,不可用来存储
别名可以在用户无感知的情况下进行数据切换
template:
针对一个或多个索引创建且绑定的模板,在模板中可以定义settings和mapping,绑定了模板的index在创建时将会自动使用模板中的配置而不是默认配置.
索引名的命名规则:
只能小写
不能包含\,/,*,?,",<,>,|, ` ` 空格,,,#
7.0版本可以包含:, 可能在以后版本删除
不能以-, _, +开头
不能是.or..
长度不能超过255个字节
可以以.开头,但是已经废弃
所以索引名必须小写,最好不要包含奇怪字符,也最好不要是中文,一般我们可以使用如下格式:
data_type-yyyy.mm/dd
ES Index 的增删改查
创建索引:
1. 以默认配置创建索引:
PUT facebook
2. 自定义配置创建索引
PUT facebook
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"username": {
"type": "keyword"
},
"age": {
"type": "double"
}
}
},
"aliases": {
"social_platform": {}
}
}
删除索引
1. 直接删除索引,索引和数据都被清空
DELETE facebook
2.delete by query(删除数据,保留索引):
POST facebook/delete_by_query
{
"query":{
"match_all":{}
}
}
更新索引
ES索引中的数据只能删除和被覆盖,不可以更改。
关于索引,我们可以对以下3个配置进行更新:
1.更新索引动态settings:
PUT facebook/_settings
{
"settings": {
"number_of_replicas": 2
}
}
2.更新索引Mapping:
Object对象可以添加新的属性.
已经存在的fields里面可以添加fields,以构成一个字段多种类型.
ignore_above 是可以更新的.
3. 添加索引alias
POST /_aliases
{
"actions": [
{
"add": {
"index": "facebook",
"alias": "social_platform"
}
}
]
查询索引
count和data查询:
GET facebook/_count
GET facebook/_search?pretty
mapping和settings查询:
GET facebook/_mapping
GET facebook/_settings
索引的其他API:
Index Exist API:判断一个索引是否存在
HEAD facebook
response: 200 - OK or 404 - Not Found
Flush API
索引的Flush 会将内存中的数据存储到磁盘中,并更新translog的记录
POST /facebook/_flush
POST _flush