ES常见Index API操作最佳实践!

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 【10月更文挑战第21天】

左框 requests,右框 response

3.1 创建

PUT /索引名

PUT /test_index?pretty

对应

老版响应:

@JsonpDeserializable
public class CreateIndexResponse implements AcknowledgedResponse, JsonpSerializable {
   
    private final String index;

      // 指示在超时之前是否已为索引中的每个分片启动了必需数量的分片副本
    private final boolean shardsAcknowledged;

      // 指示索引是否已成功在集群中创建
    private final boolean acknowledged;

      // `acknowledged` 或 `shards_acknowledged` 仍可能 `false`,但索引创建已成功。这些值只是指示操作是否在超时前完成
      // 如 `acknowledged` = `false`,则我们在集群状态使用新创建的索引更新之前超时,但它很可能很快就被创建
      // 如 `shards_acknowledged` 为 `false`,则我们在启动必需数量的分片之前超时(默认情况下只是主分片),即使集群状态已成功更新以反映新创建的索引(即 `acknowledged=true`)

创建文档时,若index不存在,ES会自动创建对应的indextype

PUT /index/type/id

可用创建索引 API 将新索引添加到 Elasticsearch 集群。创建索引时,可指定:

  • 索引设置
  • 索引中字段的映射
  • 索引别名

请求正文

包含查询参数

CreateIndexRequest: PUT /bas_activity {
   "settings":{
   }}
@JsonpDeserializable
public class CreateIndexRequest extends RequestBase implements JsonpSerializable {
   
      // 可选,对象的对象) 索引的别名。`aliases` 对象的属性**`<alias>`**(必填,对象) 键是别名名称。索引别名名称支持 [日期数学]。对象正文包含别名的选项。支持空对象。`<alias>` 的属性**`filter`**(可选,[查询 DSL 对象]用于限制别名可以访问的文档的查询。**`index_routing`**(可选,字符串) 用于将索引操作路由到特定分片的 value。如果指定,这将覆盖索引操作的 `routing` value。**`is_hidden`**(可选,布尔值) 如果为 `true`,则别名是 [隐藏的]。默认值为 `false`。别名的所有索引必须具有相同的 `is_hidden` value。**`is_write_index`**(可选,布尔值) 如果为 `true`,则索引是别名的 [写入索引]。默认值为 `false`。**`routing`**(可选,字符串) 用于将索引和搜索操作路由到特定分片的 value。**`search_routing`**(可选,字符串) 用于将搜索操作路由到特定分片的 value。如果指定,这将覆盖搜索操作的 `routing` value。
    private final Map<String, Alias> aliases;

      // 路径参数 (必填,字符串) 要创建的索引的名称。索引名称必须符合以下条件仅限小写不能包含 `\`、`/`、`*`、`?`、`"`、`<`、`>`、`|`、` `(空格字符)、`,`、`#`7.0 之前的索引可以包含冒号 (`:`),但这已弃用,在 7.0+ 中将不再支持不能以 `-`、`_`、`+` 开头不能是 `.` 或 `..`不能超过 255 个字节(注意是字节,所以多字节字符将更快地达到 255 个字节的限制)以 `.` 开头的名称已弃用,但 [隐藏索引]和插件管理的内部索引除外
    private final String index;

      // 可选,[映射对象]索引中字段的映射。如果指定,此映射可以包含字段名称[字段数据类型][映射参数]
    @Nullable
    private final TypeMapping mappings;

      // 可选,[时间单位](https://elastic.ac.cn/guide/en/elasticsearch/reference/current/api-conventions.html#time-units)) 等待主节点的时间段。如果在超时时间到期之前主节点不可用,则请求失败并返回错误。默认值为 `30s`。也可以设置为 `-1`,表示请求永远不会超时。
    @Nullable
    private final Time masterTimeout;

      // 可选,[索引设置对象]索引的配置选项
    @Nullable
    private final IndexSettings settings;

      // 可选,[时间单位]等待响应的时间段。如果在超时时间到期之前未收到响应,则请求失败并返回错误。默认值为 `30s`。
    @Nullable
    private final Time timeout;

      // (可选,字符串) 在继续操作之前必须处于活动状态的分片副本数量。设置为 `all` 或任何正整数,直到索引中的分片总数 (`number_of_replicas+1`)。默认值:1,主分片。请参阅 [活动分片](https://elastic.ac.cn/guide/en/elasticsearch/reference/current/docs-index_.html#index-wait-for-active-shards)。
    @Nullable
    private final WaitForActiveShards waitForActiveShards;

示例

索引设置

每个创建的索引都可以具有与其关联的特定设置,这些设置在正文中定义

PUT /my-index-000001
{
   
  "settings": {
   
    "index": {
   
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}
  • number_of_shards 的默认值为 1
  • number_of_replicas 的默认值为 1(即每个主分片一个副本)

或更简化

PUT /my-index-000001
{
   
  "settings": {
   
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

不必在 settings 部分中显式指定 index 部分。

有关创建索引时可以设置的所有不同索引级别设置的更多信息,请查看 索引模块 部分。

映射

创建索引 API 允许提供映射定义

PUT /test
{
   
  "settings": {
   
    "number_of_shards": 1
  },
  "mappings": {
   
    "properties": {
   
      "field1": {
    "type": "text" }
    }
  }
}

别名

创建索引 API 还允许提供一组 别名

PUT /test
{
   
  "aliases": {
   
    "alias_1": {
   },
    "alias_2": {
   
      "filter": {
   
        "term": {
    "user.id": "kimchy" }
      },
      "routing": "shard-1"
    }
  }
}

索引别名名称也支持 日期数学

PUT /logs
{
   
  "aliases": {
   
    "<logs_{now/M}>": {
   }
  }
}

等待活动分片

默认情况下,索引创建只会当每个分片的主副本启动或请求超时时才向客户端返回响应。索引创建响应将指示发生了什么

{
   
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "logs"
}

可通过索引设置 index.write.wait_for_active_shards 更改仅等待主分片启动的默认值(请注意,更改此设置也会影响所有后续写入操作的 wait_for_active_shards value)

PUT /test
{
   
  "settings": {
   
    "index.write.wait_for_active_shards": "2"
  }
}

或通过请求参数 wait_for_active_shards

PUT /test?wait_for_active_shards=2

查看现有索引

GET _cat/indices

存在(exists)

检查数据流、索引或别名是否存在。

HEAD my-data-stream

请求

HEAD <目标>

路径参数

  • <目标>

    (可选,字符串) 数据流、索引和别名的逗号分隔列表。支持通配符 (*)。

查询参数

public class ExistsRequest extends RequestBase {
   

      // (可选) false,则如果任何通配符表达式、[索引别名]或_all值仅针对缺少或关闭的索引,则请求将返回错误。即使请求针对其他打开的索引,此行为也适用。如索引以 `foo` 开头,但没有索引以 `bar` 开头,则针对 `foo*,bar*` 的请求将返回错误。默认 `true`
    @Nullable
    private final Boolean allowNoIndices;

      // (可选) 通配符模式可以匹配的索引类型。如果请求可以针对数据流,则此参数确定通配符表达式是否匹配隐藏的数据流。支持逗号分隔的值,例如 `open,hidden`。有效值为**`all`**匹配任何数据流或索引,包括 [隐藏]的数据流或索引。**`open`**匹配打开的、非隐藏的索引。还匹配任何非隐藏的数据流。**`closed`**匹配关闭的、非隐藏的索引。还匹配任何非隐藏的数据流。数据流不能关闭。**`hidden`**匹配隐藏的数据流和隐藏的索引。必须与 `open`、`closed` 或两者结合使用。**`none`**不接受通配符模式。默认为 `open`。
    private final List<ExpandWildcard> expandWildcards;

      // (可选) 如果为 `true`,则以扁平格式返回设置。默认为 `false`。
    @Nullable
    private final Boolean flatSettings;

      // (可选) 如果为 `false`,则如果请求针对缺少或关闭的索引,则请求将返回错误。默认为 `false`
    @Nullable
    private final Boolean ignoreUnavailable;

      // (可选) 如果为 `true`,则在响应中返回所有默认设置。默认为 `false`。
    @Nullable
    private final Boolean includeDefaults;

    private final List<String> index;

      // (可选) 如果为 `true`,则请求仅从本地节点检索信息。默认为 `false`,这意味着信息是从主节点检索的。
    @Nullable
    private final Boolean local;
ExistsRequest: HEAD /bas_activity

[HEAD http://localhost:9200/bas_activity/_doc/318799649324400640]

响应代码

  • 200

    所有目标都存在。

  • 404

    一个或多个指定的目标不存在。

删除

DELETE /test_index?pretty

删除一个或多个索引。

DeleteIndexRequest: DELETE /bas_activity

DELETE /my-index-000001

请求

DELETE /<index>

描述

删除索引会删除其文档、分片和元数据。 它不会删除相关的 Kibana 组件,例如数据视图、可视化或仪表板。

您无法删除数据流的当前写入索引。 要删除索引,您必须 滚动 数据流,以便创建新的写入索引。 然后,您可以使用删除索引 API 删除之前的写入索引。

路径参数

  • <index>

    (必填,字符串)要删除的索引的逗号分隔列表。 不能指定 索引别名。默认情况下,此参数不支持通配符 (*) 或 _all。 要使用通配符或 _all,请将 action.destructive_requires_name 集群设置设置为 false

查询参数

public class DeleteIndexRequest extends RequestBase {
   

      // (可选)如果为 `false`,则如果任何通配符表达式、[索引别名]或 `_all` 值仅针对缺少或关闭的索引,则请求将返回错误。 即使请求针对其他打开的索引,此行为也适用。 例如,如果索引以 `foo` 开头但没有索引以 `bar` 开头,则针对 `foo*,bar*` 的请求将返回错误。默认为 `true`
    @Nullable
    private final Boolean allowNoIndices;

      // (可选)通配符模式可以匹配的索引类型。 如果请求可以定位数据流,则此参数确定通配符表达式是否匹配隐藏数据流。 支持逗号分隔值,例如 `open,hidden`。 有效值为**`all`**匹配任何数据流或索引,包括 [隐藏的]数据流或索引。**`open`**匹配打开的、非隐藏的索引。 也匹配任何非隐藏的数据流。**`closed`**匹配关闭的、非隐藏的索引。 也匹配任何非隐藏的数据流。 数据流不能关闭。**`hidden`**匹配隐藏的数据流和隐藏的索引。 必须与 `open`、`closed` 或两者结合使用。**`none`**不接受通配符模式。默认为 `open,closed`
    private final List<ExpandWildcard> expandWildcards;

      // (可选)如果为 `false`,则如果请求针对缺少或关闭的索引,则该请求将返回错误。 默认为 `false`
    @Nullable
    private final Boolean ignoreUnavailable;

    private final List<String> index;

      // (可选,[时间单位]等待主节点的时间段。 如果在超时到期之前主节点不可用,则请求失败并返回错误。 默认为 `30s`。 也可以设置为 `-1` 以指示请求永不超时
    @Nullable
    private final Time masterTimeout;

      // (可选,[时间单位]等待响应的时间段。 如果在超时到期之前未收到任何响应,则请求失败并返回错误。 默认为 `30s`
    @Nullable
    private final Time timeout;
目录
相关文章
|
2月前
|
监控 安全 API
电商API安全最佳实践:保护用户数据免受攻击
在电商领域,API是连接用户、商家和支付系统的核心枢纽,但也常成为黑客攻击目标。本文系统介绍电商API安全的最佳实践,涵盖HTTPS加密、强认证授权、输入验证、速率限制、日志监控、安全审计及数据加密等关键措施,帮助您有效防范数据泄露与攻击风险,保障业务安全稳定运行。
101 0
|
3月前
|
存储 监控 安全
电商API安全指南:保护数据与防止欺诈的最佳实践
在电商领域,API安全至关重要。本文从基础到实践,全面解析电商API安全策略:通过强认证、数据加密、输入验证及访问控制保护敏感数据;借助速率限制、欺诈检测与行为分析防范恶意行为。同时,强调将安全融入开发生命周期,并提供应急计划。遵循最佳实践,可有效降低风险,增强用户信任,助力业务稳健发展。
116 4
|
5月前
|
人工智能 运维 关系型数据库
云服务API与MCP深度集成,RDS MCP最佳实践
近日,阿里云数据库RDS发布开源RDS MCP Server,将复杂的技术操作转化为自然语言交互,实现"对话即运维"的流畅体验。通过将RDS OpenAPI能力封装为MCP协议工具,用户只需像聊天一样描述需求,即可完成数据库实例创建、性能调优、故障排查等专业操作。本文介绍了RDS MCP(Model Context Protocol)的最佳实践及其应用,0代码,两步即可轻松完成RDS实例选型与创建,快来体验!
云服务API与MCP深度集成,RDS MCP最佳实践
|
5月前
|
JSON 测试技术 API
书写API文档的最佳实践📚
API文档对开发者体验和API成功至关重要。本文探讨了编写清晰、全面且友好的API文档的最佳实践,包括定义API目的、结构化文档、提供代码示例、处理错误、版本控制及测试验证等关键步骤。通过实际案例(如WeatherAPI),展示了如何优化文档内容,帮助开发者快速上手并高效使用API。同时强调交互式功能、国际化支持和用户反馈的重要性,以提升文档的可用性和全球可达性。高质量文档不仅能推动API采用率,还能培养强大的开发者社区,为API的长期成功奠定基础。
|
10月前
|
JavaScript 前端开发 API
探索组合式API与Options API的对比及最佳实践
探索组合式API与Options API的对比及最佳实践
299 83
|
8月前
|
弹性计算 监控 安全
API稳定安全最佳实践:用阿里云SDK为业务保驾护航
阿里云智能集团高级技术专家赵建强和曹佩杰介绍了API稳定安全最佳实践,涵盖业务上云真实案例、集成开发最佳实践、配额管理和共担模型四部分。通过分析企业在不同阶段遇到的问题,如签名报错、异常处理不严谨、扩容失败等,提出了解决方案和工具,确保API调用的安全性和稳定性。特别强调了SDK的使用、无AK方案、自动刷新机制以及配额中心的作用,帮助用户构建更稳定、安全的服务,提升运维效率。最终介绍了集成开发共担模型,旨在通过最佳实践和平台工具,保障业务的稳定与安全,推动行业创新与发展。
|
9月前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
272 9
|
9月前
|
监控 数据管理 测试技术
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
|
10月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
10月前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
247 12