索引管理
禁止自动创建索引
可以通过在 config/elasticsearch.yml 的每个节点下添加下面的配置:
action.auto_create_index: false
索引的格式
在请求体里面传入设置或类型映射,如下所示:
PUT /goods
{
"settings": { ... any settings ... },
"mappings": {
"properties": { ... any properties ... }
}
}
- settings: 用来设置分片,副本等配置信息
- mappings: 字段映射,类型等(相当于mysql的表结构):
1)type
String类型, 又分两种:
text:可分词,不可参与聚合
keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
Numerical:数值类型 分两类
基本数据类型:long、interger、short、byte、double、float、half_float
浮点数的高精度类型:scaled_float需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存 储,取出时再还原。
Date:日期类型 elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省 空间。
Array:数组类型 进行匹配时,任意一个元素满足,都认为满足 排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序
Object:对象
2)index
index影响字段的索引情况。
true:字段会被索引,则可以用来进行搜索。默认值就是true
false:字段不会被索引,不能用来搜索
index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。
但是有些字段是我们不希望被索引的,比如企业的logo图片地址,就需要手动设置index为false。
3)store
是否将数据进行独立存储。 原始的文本会存储在 _source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从 _source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存 储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置, 默认为false。
4)analyzer:指定分词器
一般我们处理中文会选择ik分词器 ik_max_word ik_smart
创建索引
我们创建一个goods索引,其中包含两个属性:goods_id,goods_name;
PUT /goods
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings":{
"properties":{
"goods_id":{
"type":"long",
"index":true,
"store":true
},
"goods_name":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
更新索引
在Elasticsearch中,一旦映射(mapping)被创建,它就是不可变的,你不能更新已有的映射。如果你需要修改映射,你需要重新索引(reindexing)。Elasticsearch提供了_reindexAPI来帮助你完成这个任务。以下是一个基本的重新索引过程的步骤:
-
创建一个新的索引,使用新的映射。
-
将旧索引中的数据重新索引到新索引中,执行重新索引:
# 使用_reindexAPI将数据从旧索引迁移到新索引。
POST _reindex
{
"source": {
"index": "old_index"
},
"dest": {
"index": "new_index"
}
}
在这个请求中,old_index是旧索引的名称,new_index是新索引的名称。
- 当数据被成功迁移后,可以删除旧索引。
关闭索引
一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写操作。
POST /goods/_close
打开索引
POST /goods/_open
删除索引
DELETE /goods
查询索引
GET /goods
返回示例:
{
"goods": {
"aliases": {},
"mappings": {
"properties": {
"goods_id": {
"type": "long",
"store": true
},
"goods_name": {
"type": "text",
"analyzer": "ik_max_word"
}
}
},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "1",
"provided_name": "goods",
"creation_date": "1709704342951",
"number_of_replicas": "0",
"uuid": "qB9Or-3yT52JdU7FSczT6g",
"version": {
"created": "8500010"
}
}
}
}
}
查看全部索引
GET /_cat/indices?v
返回示例:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size
yellow open read_me nXs-sugbTjO5OouSgODYXw 1 1 1 0 5.2kb 5.2kb 5.2kb
green open goods qB9Or-3yT52JdU7FSczT6g 1 0 0 0 249b 249b 249b
health 当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status 索引打开、关闭状态
index 索引名
uuid 索引统一编号
pri 主分片数量
rep 副本数量
docs.count 可用文档数量
docs.deleted 文档删除状态(逻辑删除)
store.size 主分片和副分片整体占空间大小
pri.store.size 主分片占空间大小
停止索引生命周期管理插件
POST /_ilm/stop