Documentation
¶
Overview ¶
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 ```
Index ¶
- Variables
- type Forcemerge
- func (r *Forcemerge) AllowNoIndices(allownoindices bool) *Forcemerge
- func (r Forcemerge) Do(providedCtx context.Context) (*Response, error)
- func (r *Forcemerge) ErrorTrace(errortrace bool) *Forcemerge
- func (r *Forcemerge) ExpandWildcards(expandwildcards ...expandwildcard.ExpandWildcard) *Forcemerge
- func (r *Forcemerge) FilterPath(filterpaths ...string) *Forcemerge
- func (r *Forcemerge) Flush(flush bool) *Forcemerge
- func (r *Forcemerge) Header(key, value string) *Forcemerge
- func (r *Forcemerge) HttpRequest(ctx context.Context) (*http.Request, error)
- func (r *Forcemerge) Human(human bool) *Forcemerge
- func (r *Forcemerge) IgnoreUnavailable(ignoreunavailable bool) *Forcemerge
- func (r *Forcemerge) Index(index string) *Forcemerge
- func (r Forcemerge) IsSuccess(providedCtx context.Context) (bool, error)
- func (r *Forcemerge) MaxNumSegments(maxnumsegments string) *Forcemerge
- func (r *Forcemerge) OnlyExpungeDeletes(onlyexpungedeletes bool) *Forcemerge
- func (r Forcemerge) Perform(providedCtx context.Context) (*http.Response, error)
- func (r *Forcemerge) Pretty(pretty bool) *Forcemerge
- func (r *Forcemerge) WaitForCompletion(waitforcompletion bool) *Forcemerge
- type NewForcemerge
- type Response
Constants ¶
This section is empty.
Variables ¶
var ErrBuildPath = errors.New("cannot build path, check for missing path parameters")
ErrBuildPath is returned in case of missing parameters within the build of the request.
Functions ¶
This section is empty.
Types ¶
type Forcemerge ¶
type Forcemerge struct {
// contains filtered or unexported fields
}
func New ¶
func New(tp elastictransport.Interface) *Forcemerge
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 ```
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html
func (*Forcemerge) AllowNoIndices ¶
func (r *Forcemerge) AllowNoIndices(allownoindices bool) *Forcemerge
AllowNoIndices Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified) API name: allow_no_indices
func (Forcemerge) Do ¶
func (r Forcemerge) Do(providedCtx context.Context) (*Response, error)
Do runs the request through the transport, handle the response and returns a forcemerge.Response
func (*Forcemerge) ErrorTrace ¶ added in v8.14.0
func (r *Forcemerge) ErrorTrace(errortrace bool) *Forcemerge
ErrorTrace When set to `true` Elasticsearch will include the full stack trace of errors when they occur. API name: error_trace
func (*Forcemerge) ExpandWildcards ¶
func (r *Forcemerge) ExpandWildcards(expandwildcards ...expandwildcard.ExpandWildcard) *Forcemerge
ExpandWildcards Whether to expand wildcard expression to concrete indices that are open, closed or both. API name: expand_wildcards
func (*Forcemerge) FilterPath ¶ added in v8.14.0
func (r *Forcemerge) FilterPath(filterpaths ...string) *Forcemerge
FilterPath Comma-separated list of filters in dot notation which reduce the response returned by Elasticsearch. API name: filter_path
func (*Forcemerge) Flush ¶
func (r *Forcemerge) Flush(flush bool) *Forcemerge
Flush Specify whether the index should be flushed after performing the operation (default: true) API name: flush
func (*Forcemerge) Header ¶
func (r *Forcemerge) Header(key, value string) *Forcemerge
Header set a key, value pair in the Forcemerge headers map.
func (*Forcemerge) HttpRequest ¶
HttpRequest returns the http.Request object built from the given parameters.
func (*Forcemerge) Human ¶ added in v8.14.0
func (r *Forcemerge) Human(human bool) *Forcemerge
Human When set to `true` will return statistics in a format suitable for humans. For example `"exists_time": "1h"` for humans and `"eixsts_time_in_millis": 3600000` for computers. When disabled the human readable values will be omitted. This makes sense for responses being consumed only by machines. API name: human
func (*Forcemerge) IgnoreUnavailable ¶
func (r *Forcemerge) IgnoreUnavailable(ignoreunavailable bool) *Forcemerge
IgnoreUnavailable Whether specified concrete indices should be ignored when unavailable (missing or closed) API name: ignore_unavailable
func (*Forcemerge) Index ¶
func (r *Forcemerge) Index(index string) *Forcemerge
Index A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices API Name: index
func (Forcemerge) IsSuccess ¶
func (r Forcemerge) IsSuccess(providedCtx context.Context) (bool, error)
IsSuccess allows to run a query with a context and retrieve the result as a boolean. This only exists for endpoints without a request payload and allows for quick control flow.
func (*Forcemerge) MaxNumSegments ¶
func (r *Forcemerge) MaxNumSegments(maxnumsegments string) *Forcemerge
MaxNumSegments The number of segments the index should be merged into (default: dynamic) API name: max_num_segments
func (*Forcemerge) OnlyExpungeDeletes ¶
func (r *Forcemerge) OnlyExpungeDeletes(onlyexpungedeletes bool) *Forcemerge
OnlyExpungeDeletes Specify whether the operation should only expunge deleted documents API name: only_expunge_deletes
func (Forcemerge) Perform ¶ added in v8.7.0
Perform runs the http.Request through the provided transport and returns an http.Response.
func (*Forcemerge) Pretty ¶ added in v8.14.0
func (r *Forcemerge) Pretty(pretty bool) *Forcemerge
Pretty If set to `true` the returned JSON will be "pretty-formatted". Only use this option for debugging only. API name: pretty
func (*Forcemerge) WaitForCompletion ¶
func (r *Forcemerge) WaitForCompletion(waitforcompletion bool) *Forcemerge
WaitForCompletion Should the request wait until the force merge is completed. API name: wait_for_completion
type NewForcemerge ¶
type NewForcemerge func() *Forcemerge
NewForcemerge type alias for index.
func NewForcemergeFunc ¶
func NewForcemergeFunc(tp elastictransport.Interface) NewForcemerge
NewForcemergeFunc returns a new instance of Forcemerge with the provided transport. Used in the index of the library this allows to retrieve every apis in once place.
type Response ¶ added in v8.7.0
type Response struct { Shards_ *types.ShardStatistics `json:"_shards,omitempty"` // Task task contains a task id returned when wait_for_completion=false, // you can use the task_id to get the status of the task at _tasks/<task_id> Task *string `json:"task,omitempty"` }
Response holds the response body struct for the package forcemerge