当前位置: 首页 > news >正文

5 索引的操作

1. 滚动索引

接上回索引别名

当一个索引数据量太大时,如果继续写入数据可能会导致分片容量过大,查询时会因内存不足引起集群崩溃。
为了避免所有的数据都写入同一个索引,可以考虑使用滚动索引。

滚动索引需要配合索引别名一起使用,可实现把原先写入一个索引的数据自动分发到多个索引中。
例如: 先创建一个索引log1,并给定别名logs-all。

PUT /logs1
{"aliases": {"logs-all": {}}
}
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "logs1"
}

然后使用别名往logs1中写入数据。

PUT logs-all/_doc/1?refresh
{"visittime":"10:00:00","keywords":"[世界杯]","rank":18,"clicknum":13,"id":10001,"userid":"2982199073774412","key":"10001"
}
{"_index" : "logs1","_type" : "_doc","_id" : "1","_version" : 1,"result" : "created","forced_refresh" : true,"_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}
PUT logs-all/_doc/2?refresh
{"visittime":"11:00:00","keywords":"[杯]","rank":20,"clicknum":12,"id":1121,"userid":"2982199073774412","key":"2"
}
{"_index" : "logs1","_type" : "_doc","_id" : "2","_version" : 1,"result" : "created","forced_refresh" : true,"_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 1,"_primary_term" : 1
}

现在来为别名logs-all指定一个滚动索引,如果条件成立,就把新数据写入logg2.

POST logs-all/_rollover/log2
{"conditions": {"max_age": "7d","max_docs": 1,"max_size": "5gb"}
}
{"acknowledged" : true,"shards_acknowledged" : true,"old_index" : "logs1","new_index" : "log2","rolled_over" : true,"dry_run" : false,"conditions" : {"[max_docs: 1]" : true,"[max_size: 5gb]" : false,"[max_age: 7d]" : false}
}

解释:上面的滚动索引配置的条件是,如果往别名logs-all中写入的索引数据量大于等于1,或者主分片总大小超过5GB,或者创建索引的时间长度超过7天,就把新的数据写入新索引log2。该请求会返回滚动索引的执行结果。

从请求返回的结果可以看出,此时max_docs条件已经成立,一个新的索引log2已经创建出来了,此时别名logs-all已经指向了log2,log1的别名已经被删除。因此,如果继续往别名logs-all中写数据,数据会被写入log2。

以此类推,如果log2的数据太多,可以继续使用滚动索引把新数据写入索引log3。可以指定一个有规律的名称,例如log-000001,那么每次使用滚动索引时,新的索引会自动生成名称,在前一个的尾数上直接++。

2 索引的状态管理

elasticsearch为开发人员提供了一组API用于对索引的状态进行管理,包括:清空缓存,刷新索引,冲洗索引,强制合并,关闭索引,冻结索引。

2.1 清空缓存

elasticsearch之所以能够成为高性能的搜索引擎是因为它拥有强大的缓存机制,可将很多数据直接放在内存中,可以大大提升查询速度。

分为3种缓存类型:

1.节点的查询缓存
2.分片的请求缓存和字段数据加缓存
3.fieldata是一种缓存于内存种的数据结构,它是一个文档主键指向每个字段数据的映射。类似于关系型数据库的表结构。每个字段的数据缓存在fielddata中用于高性能的排序和聚集统计。

清空字段数据缓存

POST /logs/_cache/clear?fielddata=true
{"_shards" : {"total" : 4,"successful" : 2,"failed" : 0}
}

清空节点的查询缓存

POST /logs/_cache/clear?query=true
{"_shards" : {"total" : 4,"successful" : 2,"failed" : 0}
}

清空分片的请求缓存

POST /logs/_cache/clear?request=true
{"_shards" : {"total" : 4,"successful" : 2,"failed" : 0}
}

如果想清空索引的全部缓存可以直接把参数去掉

POST /logs/_cache/clear
{"_shards" : {"total" : 4,"successful" : 2,"failed" : 0}
}

如果要清空所有的索引缓存【慎用】

POST /_cache/clear
2.2 刷新索引

当外部数据写入索引时,数据并不会直接提交到磁盘上,因为提交数据的过程成本太大,会按照一定的流程将数据周期性地提交到磁盘上进行持久化。
在这里插入图片描述

http://www.xdnf.cn/news/1307719.html

相关文章:

  • 惠普声卡驱动win10装机完成检测不到声卡
  • 每日任务day0816:小小勇者成长记之符文羊皮卷
  • ML307C 4G通信板:工业级DTU固件,多协议支持,智能配置管理
  • AI热点周报(8.10~8.16):AI界“冰火两重天“,GPT-5陷入热议,DeepSeek R2模型训练受阻?
  • c#Blazor WebAssembly在网页中多线程计算1000万次求余
  • MongoDB 聚合提速 3 招:$lookup 管道、部分索引、时间序列集合(含可复现实验与 explain 统计)
  • 完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)----PromptPilot (助手)答问之2
  • JavaEE 初阶第十九期:网络编程“通关记”(一)
  • 【Java学习】锁、线程死锁、线程安全2
  • 【C++】动态内存管理
  • 代码随想录Day52:图论(孤岛的总面积、沉没孤岛、水流问题、建造最大岛屿)
  • Ubuntu2204server系统安装后的初始化配置报错
  • ubuntu 20.04 安装anaconda以及安装spyder
  • GitHub PR 提交流程
  • 双向SSL认证之Apache实战配置
  • 从“Hello World”到“高并发中间件”:Go 语言 2025 系统学习路线图
  • 系统思考:情绪内耗与思维模式
  • linux服务器查看某个服务启动,运行的时间
  • DAY 46 通道注意力(SE注意力)
  • 【100页PPT】数字化转型某著名企业集团信息化顶层规划方案(附下载方式)
  • termios 线程 poll epoll进化 二叉AVL红黑树
  • 智能工厂生产监控大屏-vue纯前端静态页面练习
  • PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板
  • System V通信机制
  • Docker之安装部署——(1)配置国内docker镜像源
  • 【Twincat3】IO的SCAN 不可选中,SCAN中后扫描不到设备
  • 代码随想录二刷之“字符串”~GO
  • 嵌入式开发学习———Linux环境下网络编程学习(二)
  • 科普:Pygame 中,`pg.Surface` v.s. `screen`
  • 电工的基础知识以及仪器的使用