specification/indices/forcemerge/IndicesForceMergeRequest.ts (27 lines of code) (raw):

/* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { RequestBase } from '@_types/Base' import { ExpandWildcards, Indices } from '@_types/common' import { long } from '@_types/Numeric' /** * Force a merge. * Perform the force merge operation on the shards of one or more indices. * For data streams, the API forces a merge on the shards of the stream's backing indices. * * Merging reduces the number of segments in each shard by merging some of them together and also frees up the space used by deleted documents. * Merging normally happens automatically, but sometimes it is useful to trigger a merge manually. * * WARNING: We recommend force merging only a read-only index (meaning the index is no longer receiving writes). * When documents are updated or deleted, the old version is not immediately removed but instead soft-deleted and marked with a "tombstone". * These soft-deleted documents are automatically cleaned up during regular segment merges. * But force merge can cause very large (greater than 5 GB) segments to be produced, which are not eligible for regular merges. * So the number of soft-deleted documents can then grow rapidly, resulting in higher disk usage and worse search performance. * If you regularly force merge an index receiving writes, this can also make snapshots more expensive, since the new documents can't be backed up incrementally. * * **Blocks during a force merge** * * Calls to this API block until the merge is complete (unless request contains `wait_for_completion=false`). * If the client connection is lost before completion then the force merge process will continue in the background. * Any new requests to force merge the same indices will also block until the ongoing force merge is complete. * * **Running force merge asynchronously** * * If the request contains `wait_for_completion=false`, Elasticsearch performs some preflight checks, launches the request, and returns a task you can use to get the status of the task. * However, you can not cancel this task as the force merge task is not cancelable. * Elasticsearch creates a record of this task as a document at `_tasks/<task_id>`. * When you are done with a task, you should delete the task document so Elasticsearch can reclaim the space. * * **Force merging multiple indices** * * You can force merge multiple indices with a single request by targeting: * * * One or more data streams that contain multiple backing indices * * Multiple indices * * One or more aliases * * All data streams and indices in a cluster * * Each targeted shard is force-merged separately using the force_merge threadpool. * By default each node only has a single `force_merge` thread which means that the shards on that node are force-merged one at a time. * If you expand the `force_merge` threadpool on a node then it will force merge its shards in parallel * * Force merge makes the storage for the shard being merged temporarily increase, as it may require free space up to triple its size in case `max_num_segments parameter` is set to `1`, to rewrite all segments into a new one. * * **Data streams and time-based indices** * * Force-merging is useful for managing a data stream's older backing indices and other time-based indices, particularly after a rollover. * In these cases, each index only receives indexing traffic for a certain period of time. * Once an index receive no more writes, its shards can be force-merged to a single segment. * This can be a good idea because single-segment shards can sometimes use simpler and more efficient data structures to perform searches. * For example: * * ``` * POST /.ds-my-data-stream-2099.03.07-000001/_forcemerge?max_num_segments=1 * ``` * @rest_spec_name indices.forcemerge * @availability stack since=2.1.0 stability=stable * @availability serverless stability=stable visibility=private * @doc_id indices-forcemerge * @ext_doc_id index-modules-merge * @index_privileges maintenance */ export interface Request extends RequestBase { urls: [ { path: '/_forcemerge' methods: ['POST'] }, { path: '/{index}/_forcemerge' methods: ['POST'] } ] path_parts: { index?: Indices } query_parameters: { allow_no_indices?: boolean expand_wildcards?: ExpandWildcards flush?: boolean ignore_unavailable?: boolean max_num_segments?: long only_expunge_deletes?: boolean wait_for_completion?: boolean } }