【Elasticsearch】allow_no_indices

- **`allow_no_indices` 参数的作用**:  
  该参数用于控制当请求的目标索引(通过通配符、别名或 `_all` 指定)不存在或已关闭时,Elasticsearch 的行为。

- **默认行为**:  
  如果未显式设置该参数,默认值为 `true`,即允许请求的目标索引不存在或关闭,不会返回错误。

- **设置为 `false` 时的行为**:  
  如果设置为 `false`,Elasticsearch 会严格检查请求的目标索引。如果发现任何通配符、别名或 `_all` 值仅匹配到缺失或关闭的索引,请求将返回错误。即使请求中同时指定了其他存在的开放索引,只要有一部分目标索引不存在或关闭,就会触发错误

- **适用场景**:  
  该参数适用于需要确保请求的目标索引必须存在的场景。例如,在某些业务逻辑中,如果目标索引不存在或关闭,可能意味着数据不完整或配置错误,此时可以通过设置 `allow_no_indices` 为 `false` 来快速发现问题。

- **示例说明**:  
  假设有以下索引:  
  - `foo1`(存在且开放)  
  - `foo2`(存在且开放)  
  - `bar1`(不存在或关闭)  

  如果发送一个请求,目标索引为 `foo*,bar*`,并且 `allow_no_indices` 设置为 `false`,Elasticsearch 会检查 `foo*` 和 `bar*` 的匹配情况。由于 `foo*` 匹配到 `foo1` 和 `foo2`(存在且开放),但 `bar*` 没有匹配到任何存在的开放索引,因此请求会返回错误。(就是说有多个通配符去匹配,只要有一个通配符没有匹配到任何开放的索引,就会报错

使用 `_all` 搜索时

GET /_all/_search?allow_no_indices=false

,**`allow_no_indices=false` 是否触发错误取决于集群中是否存在至少一个开放的索引**。以下是具体场景分析:

---

### **1. 当集群中存在至少一个开放的索引时**
- **行为**:  
  如果集群中存在至少一个开放的索引(例如 `logs-2023-10`),即使其他索引不存在或已关闭,使用 `_all` 搜索时 **不会报错**。  
  **原因**:  
  `_all` 的作用是匹配所有存在的索引(包括别名和数据流)。只要集群中存在至少一个开放的索引,`_all` 就能成功匹配到,因此 `allow_no_indices=false` 不会触发错误。

- **示例**:  
  假设集群中存在以下索引:  
  - `logs-2023-10`(开放)  
  - `metrics-2023-10`(关闭)  

  执行以下搜索:  
  ```json
  GET /_all/_search?allow_no_indices=false
  {
    "query": {
      "match_all": {}
    }
  }
  ```
  **结果**:  
  - 搜索会成功,因为 `_all` 匹配到了 `logs-2023-10`(开放的索引)。  
  - 关闭的索引 `metrics-2023-10` 会被忽略,但不会触发错误。

---

### **2. 当集群中没有任何开放的索引时**
- **行为**:  
  如果集群中所有索引都关闭或不存在,使用 `_all` 搜索且 `allow_no_indices=false` 时,**会触发错误**。  
  **原因**:  
  `_all` 无法匹配到任何开放的索引,因此 `allow_no_indices=false` 会强制要求至少有一个索引存在,否则报错。

- **示例**:  
  假设集群中只有 `metrics-2023-10`(关闭),执行以下搜索:  
  ```json
  GET /_all/_search?allow_no_indices=false
  {
    "query": {
      "match_all": {}
    }
  }
  ```
  **结果**:  
  返回错误:  
  ```json
  {
    "error": {
      "root_cause": [
        {
          "type": "index_not_found_exception",
          "reason": "no index matches [_all]"
        }
      ]
    }
  }
  ```

---

### **关键结论**
- **`allow_no_indices=false` 的语义**:  
  它要求 **至少有一个索引存在且开放**(通过通配符、别名或 `_all` 匹配到)。  
  如果没有任何索引匹配,则触发错误。

- **`_all` 的特殊性**:  
  `_all` 的作用是匹配所有存在的开放索引。只要集群中存在至少一个开放索引,`_all` 就能成功匹配,**即使其他索引不存在或关闭**。

---

### **总结**
| 场景 | 是否触发错误 | 原因 |
|------|--------------|------|
| 集群中存在至少一个开放索引 | ❌ 不触发错误 | `_all` 匹配到了开放的索引 |
| 集群中所有索引关闭或不存在 | ✔️ 触发错误 | `_all` 未匹配到任何开放索引 |

因此,只有在集群中完全无索引(或所有索引关闭)时,`_all + allow_no_indices=false` 才会触发错误。其他情况下,只要存在至少一个开放的索引,请求会正常执行。

**通配符匹配时**

是否报错取决于以下两个条件:

1. **通配符是否匹配到至少一个开放的索引**  
2. **`allow_no_indices` 参数的设置**  

---

### **1. 默认行为(`allow_no_indices=true`)**
- **不会报错**:即使通配符未匹配到任何索引,请求也会成功(返回空结果或无操作)。  
- **示例**:  
  假设集群中存在开放索引 `logs-2023`,但通配符 `nonexistent-*` 未匹配到任何索引:  
  ```json
  GET /nonexistent-*/_search?allow_no_indices=true
  ```
  **结果**:返回空结果,不会报错。

---

### **2. 当 `allow_no_indices=false` 时**
- **是否报错取决于通配符的匹配情况**:  
  - **场景 1**:通配符 **匹配到至少一个开放索引**  
    **结果**:✅ 不报错。  
    **示例**:  
    ```json
    GET /logs-*/_search?allow_no_indices=false
    ```  
    假设 `logs-2023` 是开放的,请求成功。  

  - **场景 2**:通配符 **未匹配到任何开放索引**  
    **结果**:❌ 报错。  
    **示例**:  
    ```json
    GET /nonexistent-*/_search?allow_no_indices=false
    ```  
    返回错误:`no index matches pattern [nonexistent-*]`。

---

### **3. 通配符包含多个部分时的行为**
如果请求目标是多个通配符(例如 `logs-*,metrics-*`):  
- **任一通配符未匹配到开放索引**:会触发错误(`allow_no_indices=false` 时)。  
- **所有通配符均匹配到至少一个开放索引**:不会报错。  

**示例**:  
```json
GET /logs-*,metrics-*/_search?allow_no_indices=false
```
- 若 `logs-*` 匹配到开放索引,但 `metrics-*` 未匹配到任何索引:  
  **结果**:❌ 报错(因为 `metrics-*` 未匹配到)。  
- 若 `logs-*` 和 `metrics-*` 均匹配到开放索引:  
  **结果**:✅ 成功。

---

### **总结**
| 条件 | `allow_no_indices=false` 时的行为 |
|------|----------------------------------|
| 通配符匹配到至少一个开放索引 | ✅ 成功 |
| 通配符未匹配到任何开放索引 | ❌ 报错 |
| 多通配符中部分未匹配到开放索引 | ❌ 报错 |

---

### **关键结论**
- **集群中存在开放索引 ≠ 通配符一定能匹配到索引**:  
  即使集群中有其他开放索引,如果通配符未匹配到它们,仍可能报错。
- **通配符的精确匹配是关键**:  
  需确保通配符模式能覆盖到目标索引(例如 `logs-*` 匹配 `logs-2023`)。

在 Elasticsearch 中,**别名**和 **_all** 是用于简化索引操作的特性。以下是它们的例子和解释:

---

### **1. 别名(Alias)的例子**

别名是一个指向一个或多个索引的虚拟名称。通过别名,可以更方便地操作索引,而无需直接使用索引名称。

#### **例子:**
假设有两个索引:
- `logs-2023-10-01`
- `logs-2023-10-02`

你可以为这两个索引创建一个别名 `current-logs`,然后通过别名来查询或操作这两个索引。

#### **创建别名:**
```json
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "logs-2023-10-01",
        "alias": "current-logs"
      }
    },
    {
      "add": {
        "index": "logs-2023-10-02",
        "alias": "current-logs"
      }
    }
  ]
}
```

#### **使用别名查询:**
```json
GET /current-logs/_search
{
  "query": {
    "match_all": {}
  }
}
```
这个查询会同时搜索 `logs-2023-10-01` 和 `logs-2023-10-02` 两个索引。

---

### **2. `_all` 值的例子**

`_all` 是一个特殊的值,表示搜索所有索引(包括数据流和别名)。它通常用于全局搜索。

#### **例子:**
假设有以下索引:
- `logs-2023-10-01`
- `metrics-2023-10-01`
- `users`

你可以使用 `_all` 来搜索所有索引中的数据。

#### **使用 `_all` 查询:**
```json
GET /_all/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  }
}
```
这个查询会在 `logs-2023-10-01`、`metrics-2023-10-01` 和 `users` 中搜索包含 `error` 的文档。

---

### **结合 `allow_no_indices` 的例子**

假设有以下索引:
- `logs-2023-10-01`(存在且开放)
- `logs-2023-10-02`(关闭)
- `metrics-2023-10-01`(存在且开放)

#### **场景 1:`allow_no_indices` 为 `true`(默认)**
```json
GET /logs-2023-10-02,metrics-2023-10-01/_search
{
  "query": {
    "match_all": {}
  }
}
```
- 即使 `logs-2023-10-02` 是关闭的索引,请求也不会返回错误。
- 搜索结果仅包含 `metrics-2023-10-01` 中的数据。

#### **场景 2:`allow_no_indices` 为 `false`**
```json
GET /logs-2023-10-02,metrics-2023-10-01/_search
{
  "query": {
    "match_all": {}
  }
}
```
- 由于 `logs-2023-10-02` 是关闭的索引,请求会返回错误。
- 即使 `metrics-2023-10-01` 是存在的开放索引,请求也会失败。

#### **场景 3:使用 `_all` 和 `allow_no_indices`**
```json
GET /_all/_search
{
  "query": {
    "match_all": {}
  }
}
```
- 如果集群中没有任何索引,且 `allow_no_indices` 为 `false`,请求会返回错误。
- 如果 `allow_no_indices` 为 `true`,请求会成功,但返回空结果。

---

### **总结**
- **别名**:用于简化对多个索引的操作。
- **`_all`**:用于搜索所有索引。
- **`allow_no_indices`**:控制当目标索引不存在或关闭时是否返回错误。

---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13758.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue全流程--Vue2组件的理解第二部分

组件命名规则 好的命名规则可以省去很多不必要的麻烦,这个好习惯还是要养成的 一个单词组成: 第一种写法(首字母小写):school 第二种写法(首字母大写):School 多个单词组成: 第一种写法(kebab-case命名)&#xf…

【OS】AUTOSAR架构下的Interrupt详解(上篇)

目录 前言 正文 1.中断概念分析 1.1 中断处理API 1.2 中断级别 1.3 中断向量表 1.4 二类中断的嵌套 1.4.1概述 1.4.2激活 1.5一类中断 1.5.1一类中断的实现 1.5.2一类中断的嵌套 1.5.3在StartOS之前的1类ISR 1.5.4使用1类中断时的注意事项 1.6中断源的初始化 1.…

红包雨项目前端部分

创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…

深入理解k8s中的容器存储接口(CSI)

CSI出现的原因 K8s原生支持一些存储类型的PV&#xff0c;像iSCSI、NFS等。但这种方式让K8s代码与三方存储厂商代码紧密相连&#xff0c;带来不少麻烦。比如更改存储代码就得更新K8s组件&#xff0c;成本高&#xff1b;存储代码的bug还会影响K8s稳定性&#xff1b;K8s社区维护和…

DeepSeek回答禅宗三重境界重构交易认知

人都是活在各自心境里&#xff0c;有些话通过语言去交流&#xff0c;还是要回归自己心境内在的&#xff0c;而不是靠外在映射到股票和技术方法&#xff1b;比如说明天市场阶段是不修复不接力节点&#xff0c;这就是最高视角看整个市场&#xff0c;还有哪一句话能概括&#xff1…

简单说一下CAP理论和Base理论

CAP理论 什么是CAP 一致性 可用性 分区容错性&#xff1a;系统如果不能再时限内达成数据一致性&#xff0c;就说明发生了分区的情况 然后当前操作在C和A之间做出选择 例如我的网络出现问题了&#xff0c;但是我们的系统不能因为网络问题就直接崩溃 只要我们的分布式系统没…

13.PPT:诺贝尔奖【28】

目录 NO1234 NO567 NO8/9/10 NO11/12 NO1234 设计→变体→字体→自定义字体 SmartArt超链接新增加节 NO567 版式删除图片中的白色背景&#xff1a;选中图片→格式→删除背景→拖拉整个图片→保留更改插入→图表→散点图 &#xff1a;图表图例、网格线、坐标轴和图表标题…

RabbitMQ的安装

1、官网地址 下载地址&#xff1a;Installing RabbitMQ | RabbitMQhttp://www.rabbitmq.com/download.htmlhttp://www.rabbitmq.com/download.html RabbitMQ Documentation | RabbitMQhttps://www.rabbitmq.com/docshttps://www.rabbitmq.com/docs 2、Windows上安装 2.1 安装…

【LeetCode】152、乘积最大子数组

【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…

【分布式理论六】分布式调用(4):服务间的远程调用(RPC)

文章目录 一、RPC 调用过程二、RPC 动态代理&#xff1a;屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC 序列化四、RPC 协议编码1. 协议编码的作用2. RPC 协议消息组成 五、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC 调用过程 RPC&#xff08…

Spring Task之Cron表达式

&#x1f31f; Spring Task高能预警&#xff1a;你以为的Cron表达式可能都是错的&#xff01;【附实战避坑指南】 开篇暴击&#xff1a;为什么你的定时任务总在凌晨3点翻车&#xff1f; “明明设置了0 0 2 * * ?&#xff0c;为什么任务每天凌晨3点执行&#xff1f;” —— 来…

第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)

简单来说&#xff0c; Single Thread Execution就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。 1.机场过安检 1.1非线程安全 先模拟一个非线程安全的安检口类&#xff0c;旅客(线程)分别手持登机牌和身份证接受工作人员的检查&#xff0c;示例代码如所示。…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中&#xff0c;协议号89 头部数据包内容&#xff1a; 版本(Version):对于OSPFv2&#xff0c;该字段值恒为2(使用在IPV4中)&#xff1b;对于OSPFv3&#xff0c;该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

MAC 安装mysql全过程记录

4.然后等待下载吧&#xff0c;&#xff08;下载中。。。。&#xff09;&#xff0c;好了&#xff0c;网速的问题&#xff0c;半个小时终于下载好了&#xff0c;开始安装吧。 5.得到如下安装包&#xff0c;mac下也是双击直接下载&#xff0c;来&#xff0c;我们来看看下载的过程…

神经网络常见激活函数 1-sigmoid函数

sigmoid 1 函数求导 sigmoid函数 σ ( x ) 1 1 e ( − x ) \sigma(x) \frac{1}{1e^{(-x)}} σ(x)1e(−x)1​ sigmoid函数求导 d d x σ ( x ) d d x ( 1 1 e − x ) e − x ( 1 e − x ) 2 ( 1 e − x ) − 1 ( 1 e − x ) 2 1 1 e − x − 1 ( 1 e − x ) 2 …

微软发布基于PostgreSQL的开源文档数据库平台DocumentDB

我们很高兴地宣布正式发布DocumentDB——一个开源文档数据库平台&#xff0c;以及基于 vCore、基于 PostgreSQL 构建的 Azure Cosmos DB for MongoDB 的引擎。 过去&#xff0c;NoSQL 数据库提供云专用解决方案&#xff0c;而没有通用的互操作性标准。这导致对可互操作、可移植…

【苍穹外卖 Day1】前后端搭建 Swagger导入接口文档

项目技术选型 前端 直接使用打包好的nginx运行。 后端 1、导入初始代码结构如下&#xff1a; 2、将代码上传远程仓库。 3、创建数据库&#xff0c;并修改数据库配置。 4、断点调试&#xff0c;前后端联调。 5、使用Nginx代理&#xff0c;修改Nginx配置 好处&#xff1a;提…

零基础Vue入门6——Vue router

本节重点&#xff1a; 路由定义路由跳转 前面几节学习的都是单页面的功能&#xff08;都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html&#xff09;&#xff0c;涉及到项目研发都是有很多页面的&#xff0c;这里就需要用到路由&#xff08;vue route…

深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 深度学习里面的而优化函数 …

mybatis-plus updateById源码

1.版本 : mybatis-plus-core 3.5.1 2.入口:MybatisPlusAutoConfiguration类sqlSessionFactory中的factory.getObject() 3.注入AbstractSqlInjector类中的inspectInject方法中 Overridepublic void inspectInject(MapperBuilderAssistant builderAssistant, Class<?> m…