返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Elasticsearch在应用中常见错误示例解析
  • 439
分享到

Elasticsearch在应用中常见错误示例解析

2024-04-02 19:04:59 439人浏览 薄情痞子
摘要

目录一 read_only_allow_delete" : "true"二 illegal_argument_exception三 Resul

一 read_only_allow_delete" : "true"

当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错:

{
  "error": {
    "root_cause": [
      {
        "type": "cluster_block_exception",
        "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"
      }
    ],
    "type": "cluster_block_exception",
    "reason": "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"
  },
  "status": 403
}

上述报错是说索引现在的状态是只读模式(read-only),如果查看该索引此时的状态:

GET z1/_settings
# 结果如下
{
  "z1" : {
    "settings" : {
      "index" : {
        "number_of_shards" : "5",
        "blocks" : {
          "read_only_allow_delete" : "true"
        },
        "provided_name" : "z1",
        "creation_date" : "1556204559161",
        "number_of_replicas" : "1",
        "uuid" : "3PEevS9xSm-r3tw54p0o9w",
        "version" : {
          "created" : "6050499"
        }
      }
    }
  }
}

可以看到"read_only_allow_delete" : "true",说明此时无法插入数据,当然,我们也可以模拟出来这个错误:

PUT z1
{
  "mappings": {
    "doc": {
      "properties": {
        "title": {
          "type":"text"
        }
      }
    }
  },
  "settings": {
    "index.blocks.read_only_allow_delete": true
  }
}
PUT z1/doc/1
{
  "title": "es真难学"
}

现在我们如果执行插入数据,就会报开始的错误。那么怎么解决呢?

  • 清理磁盘,使占用率低于85%。
  • 手动调整该项,具体参考官网

这里介绍一种,我们将该字段重新设置为:

PUT z1/_settings
{
  "index.blocks.read_only_allow_delete": null
}

现在再查看该索引就正常了,也可以正常的插入数据和查询了。

二 illegal_argument_exception

有时候,在聚合中,我们会发现如下报错:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyWord field instead."
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "z2",
        "node": "NRwiP9PLRFCTJA7w3H9eqA",
        "reason": {
          "type": "illegal_argument_exception",
          "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
        }
      }
    ],
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
      }
    }
  },
  "status": 400
}

这是怎么回事呢?是因为,聚合查询时,指定字段不能是text类型。比如下列示例:

PUT z2/doc/1
{
  "age":"18"
}
PUT z2/doc/2
{
  "age":20
}
GET z2/doc/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "my_sum": {
      "sum": {
        "field": "age"
      }
    }
  }
}

当我们向elasticsearch中,添加一条数据时(此时,如果索引存在则直接新增或者更新文档,不存在则先创建索引),首先检查该age字段的映射类型。

如上示例中,我们添加第一篇文档时(z1索引不存在),elasticsearch会自动的创建索引,然后为age字段创建映射关系(es就猜此时age字段的值是什么类型,如果发现是text类型,那么存储该字段的映射类型就是text),此时age字段的值是text类型,所以,第二条插入数据,age的值也是text类型,而不是我们看到的long类型。我们可以查看一下该索引的mappings信息:

GET z2/_mapping
# mapping信息如下
{
  "z2" : {
    "mappings" : {
      "doc" : {
        "properties" : {
          "age" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

上述返回结果发现,age类型是text。而该类型又不支持聚合,所以,就会报错了。解决办法就是:

  • 如果选择动态创建一篇文档,映射关系取决于你添加的第一条文档的各字段都对应什么类型。而不是我们看到的那样,第一次是text,第二次不加引号,就是long类型了不是这样的。
  • 如果嫌弃上面的解决办法麻烦,那就选择手动创建映射关系。首先指定好各字段对应什么类型。后续才不至于出错。

三 Result window is too large

很多时候,我们在查询文档时,一次查询结果很可能会有很多,而elasticsearch一次返回多少条结果,由size参数决定:

GET e2/doc/_search
{
  "size": 100000,
  "query": {
    "match_all": {}
  }
}

而默认是最多范围一万条,那么当我们的请求超过一万条时(比如有十万条),就会报:

Result window is too large, from + size must be less than or equal to: [10000] but was [100000]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.

意思是一次请求返回的结果太大,可以另行参考 scroll API或者设置index.max_result_window参数手动调整size的最大默认值:

# kibana中设置
PUT e2/_settings
{
  "index": {
    "max_result_window": "100000"
  }
}
# python中设置
from elasticsearch import Elasticsearch
es = Elasticsearch()
es.indices.put_settings(index='e2', body={"index": {"max_result_window": 100000}})

如上例,我们手动调整索引e2的size参数最大默认值到十万,这时,一次查询结果只要不超过10万就都会一次返回。

注意,这个设置对于索引es的size参数是永久生效的。

以上就是Elasticsearch在应用中常见错误示例解析的详细内容,更多关于Elasticsearch错误示例解析的资料请关注编程网其它相关文章!

--结束END--

本文标题: Elasticsearch在应用中常见错误示例解析

本文链接: https://lsjlt.com/news/146562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Elasticsearch在应用中常见错误示例解析
    目录一 read_only_allow_delete" : "true"二 illegal_argument_exception三 Resul...
    99+
    2024-04-02
  • Java中ssh整合常见错误的示例分析
    这篇文章将为大家详细讲解有关Java中ssh整合常见错误的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. org.springframework.transaction.CannotCreat...
    99+
    2023-05-31
    java ssh
  • MySQL 5.6 GTID常见错误的示例分析
    这篇文章给大家分享的是有关MySQL 5.6 GTID常见错误的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在测试环境搭建完基于GTID的双主环境后,启动数据库报错:[...
    99+
    2024-04-02
  • 使用PyTorch常见4个错误解决示例详解
    目录导读常见错误 #1 你没有首先尝试过拟合单个batch常见错误 #2: 忘记为网络设置 train/eval 模式常用的错误 #3: 忘记在.backward()之前进行.zer...
    99+
    2024-04-02
  • HTTP响应在Python中的常见错误有哪些?
    HTTP响应在Python中的常见错误有哪些? HTTP协议是Web应用程序中最常用的协议之一。它定义了客户端和服务器之间的通信方式。客户端向服务器发送HTTP请求,服务器根据请求返回HTTP响应。在Python中,我们可以使用HTTP库来...
    99+
    2023-07-07
    http 响应 django
  • Elasticsearch常见的5个错误及解决策略是什么
    这期内容当中小编将会给大家带来有关Elasticsearch常见的5个错误及解决策略是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、采用动态Mapping如果不定义Mapping,Elastics...
    99+
    2023-06-04
  • Mongodb参数说明与常见错误处理的示例分析
    这篇文章将为大家详细讲解有关Mongodb参数说明与常见错误处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。示例:一、在 CentOS7 上安装 MongoD...
    99+
    2024-04-02
  • TypeScript常见类型及应用示例讲解
    目录常见类型(Everyday Types)原始类型:数组(Array)anynoImplicitAny变量上的类型注解(Type Annotations on Variables)...
    99+
    2024-04-02
  • 单例模式在PHP中的常见应用场景剖析
    概述:单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在PHP中,使用单例模式可以有效地限制类的实例化次数和资源占用,提高代码的性能和可维护性。本文将通过分析常...
    99+
    2023-10-21
    应用场景 PHP 单例模式
  • PHP 函数常见错误的详细解析
    php 函数常见的错误有:函数不存在:调用未定义的函数,解决方法是确保函数已定义或已包含。参数类型不匹配:传递的参数类型与函数签名不匹配,解决方法是传递正确类型的数据。错误的参数数量:参...
    99+
    2024-04-11
    php 错误解析 作用域
  • PHP中常见的错误类型解析及解决方法
    《PHP中常见的错误类型解析及解决方法》 PHP作为一种广泛应用的服务器端脚本语言,常常会遇到各种错误。在开发过程中,遇到错误是不可避免的,了解这些错误的类型、原因以及解决方法对于开发...
    99+
    2024-04-02
  • PHP中错误提示的示例分析
    这篇文章将为大家详细讲解有关PHP中错误提示的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题:测试网站 Notice: Use of undefined co...
    99+
    2024-04-02
  • ORACLE常见错误代码的分析与解决
    (一)在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分析,希...
    99+
    2024-04-02
  • 常见的HTTP 4xx状态码和错误解析
    了解HTTP协议中4xx状态码的含义及常见错误,需要具体代码示例HTTP协议是互联网通信的基础协议,它定义了客户端和服务器之间的通信规范。在使用HTTP协议进行通信时,客户端发送请求,服务器返回响应。而HTTP状态码是服务器用来表示请求处理...
    99+
    2023-12-26
    Http 协议 状态码
  • 泛型在golang中的常见错误及解决方法
    go 中泛型使用不当会导致错误:指向类型参数的指针无法解引用,应使用具体类型指针。泛型类型无法与非泛型值比较,应使用反射进行比较。滥用空接口会引起运行时错误,应使用更具体的类型参数。 ...
    99+
    2024-05-02
    golang 泛型 编译错误 键值对
  • 避免在Golang开发中常见的错误
    在Golang开发过程中,由于语言本身的特性和一些常见误区,经常会出现一些容易犯的错误。本文将针对一些常见的错误进行讨论,并给出具体的代码示例来帮助开发者避免这些问题。通过学习和理解这...
    99+
    2024-02-28
    性能优化 并发编程 错误处理 并发访问 golang开发
  • Java中数组与常见异常的示例分析
    这篇文章主要介绍Java中数组与常见异常的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数组的定义单个变量能存储信息用来存储具有相同数据类型的数据集合,可以使用共同的名字来引用数组中存储的数据。特点数组可以存...
    99+
    2023-06-29
  • React 错误边界Error Boundary使用示例解析
    目录我们为什么需要错误边界如何使用错误边界组件使用错误边界需要注意什么我们为什么需要错误边界 在React组件中可能会由于某些JavaScript错误,导致一些无法追踪的错误,导致应...
    99+
    2024-04-02
  • 在Laravel中使用Git:如何避免常见的错误?
    Laravel是一个流行的PHP框架,许多开发者喜欢在其中使用Git来管理代码。Git是一个版本控制系统,它能够跟踪代码的变化并允许多人在同一时间协同工作。在本文中,我们将探讨如何在Laravel中使用Git,并且避免一些常见的错误。 初...
    99+
    2023-09-14
    django git laravel
  • Golang中常见错误及解决方法详解
    Golang中常见错误及解决方法详解 写Go语言程序时,常常会遇到一些错误,如果不及时发现和解决,会影响程序的执行流程和结果。本文将介绍一些在Golang中比较常见的错误,同时给出具体...
    99+
    2024-02-28
    错误处理 解决方法 golang错误 go语言 编译错误
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作