一个ES索引由若干个分片组成,一个分片有若干个Lucene分段,较大的Lucene分段可以更有效的存储数据。
使用_forcemerge
API 来对分段执行合并操作,通常,我们将分段合并为一个单个的分段:max_num_segments=1
-
查看某个index的forceMerge情况
GET /_cat/segments/myindex?v&s=prirep,shard
-
首先查看我们的index(可以使用正则匹配)当前有多少个segment:
GET _cat/segments/myindex?v&h=shard,segment,size,size.memory
返回结果大约有300个segment条目数。 -
执行forcemerge:
POST myindex/_forcemerge?max_num_segments=1
这个过程可能执行的时间比较久。 -
查看各个节点forceMerge的线程数:
GET _cat/thread_pool/force_merge?v&s=name
-
查看所有index的segment(段)情况和正在进行merge的文档数:
GET /_cat/indices/?s=segmentsCount:desc&v&h=index,segmentsCount,segmentsMemory,memoryTotal,mergesCurrent,mergesCurrentDocs,storeSize,p,r
从返回结果可以看到当前正在进行myindex
merge操作,segmentsCount数量会越来越小。最终会变成每个分片只有一个segment。 -
查看forceMerge任务详情
GET _tasks?detailed=true&actions=*forcemerge