索引段 API

编辑

返回有关索引分片中 Lucene 段的底层信息。对于数据流,该 API 返回有关流的后备索引的信息。

resp = client.indices.segments(
    index="my-index-000001",
)
print(resp)
response = client.indices.segments(
  index: 'my-index-000001'
)
puts response
const response = await client.indices.segments({
  index: "my-index-000001",
});
console.log(response);
GET /my-index-000001/_segments

请求

编辑

GET /<目标>/_segments

GET /_segments

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,则你必须具有目标数据流、索引或别名的 monitormanage 索引权限

路径参数

编辑
<目标>
(可选,字符串)用于限制请求的数据流、索引和别名的逗号分隔列表。支持通配符 (*)。要定位所有数据流和索引,请省略此参数或使用 *_all

查询参数

编辑
<vector_formats>
(可选,布尔值)如果为 true,则每个段中字段使用的向量格式列表将包含在输出的 attributes 中。默认为 false
allow_no_indices

(可选,布尔值)如果为 false,则当任何通配符表达式、索引别名_all 值仅定位到缺失或关闭的索引时,请求将返回错误。即使请求定位到其他打开的索引,此行为也适用。例如,如果一个索引以 foo 开头,但没有索引以 bar 开头,则定位到 foo*,bar* 的请求将返回错误。

默认为 true

expand_wildcards

(可选,字符串)通配符模式可以匹配的索引类型。如果请求可以定位到数据流,则此参数确定通配符表达式是否匹配隐藏的数据流。支持逗号分隔的值,例如 open,hidden。有效值包括

all
匹配任何数据流或索引,包括隐藏的。
open
匹配打开的、非隐藏的索引。也匹配任何非隐藏的数据流。
closed
匹配关闭的、非隐藏的索引。也匹配任何非隐藏的数据流。数据流无法关闭。
hidden
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
none
不接受通配符模式。

默认为 open

ignore_unavailable
(可选,布尔值)如果为 false,则当请求定位到缺失或关闭的索引时,请求将返回错误。默认为 false

响应体

编辑
<段>
(字符串)段的名称,例如 _0。段名称源自段的生成,并在内部用于在分片的目录中创建文件名。
generation
(整数)生成编号,例如 0。Elasticsearch 为写入的每个段递增此生成编号。然后,Elasticsearch 使用此编号来派生段名称。
num_docs
(整数)Lucene 报告的文档数。这不包括已删除的文档,并且将任何 嵌套文档 与其父文档分开计数。它也不包括最近索引的且尚未属于段的文档。
deleted_docs
(整数)Lucene 报告的已删除文档数,该数字可能高于或低于你执行的删除操作数。此数字不包括最近执行的且尚未属于段的删除。如果这样做有意义,自动合并过程会清理已删除的文档。此外,Elasticsearch 创建额外的已删除文档,以在内部跟踪分片上的操作的最近历史记录。
size_in_bytes
(整数)段使用的磁盘空间,例如 50kb
committed

(布尔值)如果为 true,则段已同步到磁盘。同步的段可以在硬重启后继续存在。

如果为 false,则未提交的段中的数据也存储在事务日志中,以便 Elasticsearch 能够在下次启动时重播更改。

search

(布尔值)如果为 true,则该段可搜索。

如果为 false,则该段很可能已写入磁盘,但需要刷新才能进行搜索。

version
(字符串)用于写入段的 Lucene 版本。
compound
(布尔值)如果为 true,则 Lucene 将段中的所有文件合并到一个文件中以保存文件描述符。
attributes
(对象)包含有关 (i) 是否启用了高压缩,(ii) 每个字段的向量格式的信息。

示例

编辑

获取特定数据流或索引的段信息

编辑
resp = client.indices.segments(
    index="test",
)
print(resp)
response = client.indices.segments(
  index: 'test'
)
puts response
const response = await client.indices.segments({
  index: "test",
});
console.log(response);
GET /test/_segments

获取多个数据流和索引的段信息

编辑
resp = client.indices.segments(
    index="test1,test2",
)
print(resp)
response = client.indices.segments(
  index: 'test1,test2'
)
puts response
const response = await client.indices.segments({
  index: "test1,test2",
});
console.log(response);
GET /test1,test2/_segments

获取集群中所有数据流和索引的段信息

编辑
resp = client.indices.segments()
print(resp)
response = client.indices.segments
puts response
const response = await client.indices.segments();
console.log(response);
GET /_segments

API 返回以下响应

{
  "_shards": ...
  "indices": {
    "test": {
      "shards": {
        "0": [
          {
            "routing": {
              "state": "STARTED",
              "primary": true,
              "node": "zDC_RorJQCao9xf9pg3Fvw"
            },
            "num_committed_segments": 0,
            "num_search_segments": 1,
            "segments": {
              "_0": {
                "generation": 0,
                "num_docs": 1,
                "deleted_docs": 0,
                "size_in_bytes": 3800,
                "committed": false,
                "search": true,
                "version": "7.0.0",
                "compound": true,
                "attributes": {
                }
              }
            }
          }
        ]
      }
    }
  }
}