Elasticsearch:使用 ingest pipeline 来管理索引名称

这篇具有很好参考价值的文章主要介绍了Elasticsearch:使用 ingest pipeline 来管理索引名称。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我之前的文章 “Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去” 我详述了如何使用已有的 date_index_name 处理器来把文档归类到所需要的和文档日期相关的的索引中去。比如,我们想把 2023 年 4 月的所有文档写入到 my-index-2023-04-01 这个索引名称中去。这个处理器很好地解决了在很多情况下,我们需要把当月或者当年的索引放到我们需要的以文档时间戳相关索引名称中,这样便于以后的管理及搜索。

在今天的文章中,我们将以另外一种方式来实现同样的方案。

各种不同的方法来修改数据

在 Elastic Stack 中的使用中,我们有许多不同的方案来修改数据,比如:

Elasticsearch:使用 ingest pipeline 来管理索引名称

在上面,我们使用定制的微服务来摄入商业应用文档,并使用我们的算法来修改文档,最终通过 client 库把文档写入到 Elasticsearch 中。这种方法的缺点是你需要编写相应的应用程序来完成。针对大量的数据,我们可能没有缓冲,有时我们甚至不能保证至少一次传输。这种在 Logstash 和 Filebeat 中都有实现。

我们也可以采用 Logstash 来对数据进行修改:

Elasticsearch:使用 ingest pipeline 来管理索引名称 

Logstash 提供了丰富的过滤器来帮助我们处理数据。你可以阅读文章 “Logstash:Logstash 入门教程 (一)” 以了解更多。这种方案的缺点是,为了应付 single point of failure 及负载均衡,你需要管理多个 Logstash 实例。这个需要额外的工作。  

在最新的开发者中,越来越多的开发者倾向于使用 ingest pipeline 来对数据进行处理。更多关于 ingest pipeline 的文章可以参考 “Elastic:开发者上手指南”。

Elasticsearch:使用 ingest pipeline 来管理索引名称

Ingest 节点是 Elasticsearch 集群中的一类节点。它可以帮我们运行丰富的处理器来处理数据。由于它是 Elasticsearch 集群的一个部分,它可以很方便地进行扩容操作来应付更多的需求。 

Elasticsearch:使用 ingest pipeline 来管理索引名称

使用  Ingest pipeline 的好处是:

  • 能够在不改变应用程序逻辑的情况下修改数据
  • 与 Logstash 相比的轻量级解决方案
  • 单独管理集群没有额外开销
  • 降低结构复杂性

尽管 ingest pipeline 有上面的很多优点,但是使用 ingest pipeline 也有一些局限性:

  • 无法将文档拆分为多个文档([Ingest Pipeline] Ability to split documents · Issue #56769 · elastic/elasticsearch · GitHub)
  • 由于摄取管道的性质,同时处理多个文档时可能会遇到挑战
  • 不能和外部的数据库进行 join 等操作,也无法访问外部的数据库并写入

除了上面所述的修改数据的方案中,另外一个就是通过 Beats processor 来对数据进行加工。你可以更进一步阅读 “Beats:Beats processors”。

把数据写入到我们想要的索引中去

我们接下来通过 ingest pipeline 的方法来把我们想要的数据写入到我们想要的索引中去。我们想把

Elasticsearch:使用 ingest pipeline 来管理索引名称

比如在上面,我们可以看到一个字段叫做 created_at。它是发生在 2022-11-30 这个天。我们想把这个文档写入到我们想要的索引名称中 books.2022.11。道理很简单,我们就是想把当月的所有文档归于同样的一个索引名称 books.2022.11 这个索引中。以后便于归档及搜索。在实际的生产环境中,有这种需求。那么我们该如何实现我们的这种需求呢?

我们采用 ingest pipeline 来实现这个需求。我们在 Kibana 中打入如下的命令:

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "description": "Change index name according to created_at",
    "processors": [
      {
        "date": {
          "field": "created_at",
          "target_field": "index_suffix", 
          "formats": ["ISO8601"],
          "output_format": "yyyy.MM"
        }
      },
      {
        "set": {
          "field": "_index",
          "value": "{{ _index }}.{{index_suffix}}"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "created_at": "2023-04-13T23:57:11.092808962ZZ",
        "content": "This is Xiaoguo, Liu from Elastic"
      }
    }
  ]
}

运行上面的命令,我们看到的结果是:

{
  "docs": [
    {
      "doc": {
        "_index": "_index.2023.04",
        "_id": "_id",
        "_version": "-3",
        "_source": {
          "created_at": "2023-04-13T23:57:11.092808962ZZ",
          "content": "This is Xiaoguo, Liu from Elastic",
          "index_suffix": "2023.04"
        },
        "_ingest": {
          "timestamp": "2023-04-14T00:01:24.74589526Z"
        }
      }
    }
  ]
}

在上面,由于我们没有指定 _index,所以测试的结果是 _index.2023.04。在下面,如果我们指定 _index,那么就会自动替换我们想要的索引名称。上面显示它已经是我们想要的结果。我们可以创建如下的 pipeline:

PUT _ingest/pipeline/change_index_according_to_created_at
{
  "description": "Change index name according to created_at",
  "processors": [
    {
      "date": {
        "field": "created_at",
        "target_field": "index_suffix",
        "formats": [
          "ISO8601"
        ],
        "output_format": "yyyy.MM"
      }
    },
    {
      "set": {
        "field": "_index",
        "value": "{{ _index }}.{{index_suffix}}"
      }
    }
  ]
}

运行完上面的命令后,我们使用如下的命令来做测试:

PUT books/_doc/1?pipeline=change_index_according_to_created_at
{
  "created_at": "2023-04-13T23:57:11.092808962ZZ",
  "content": "This is Xiaoguo Liu from Elastic"
}

上面的命令返回的结果为:

{
  "_index": "books.2023.04",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

如上所示,我们的 _index 名称现在变为 books.2023.04,而不是在写入时的 books。我们可以通过如下的命令来进行查询刚才写入的数据:

GET books.2023.04/_search

上面的命令返回:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "books.2023.04",
        "_id": "1",
        "_score": 1,
        "_source": {
          "created_at": "2023-04-13T23:57:11.092808962ZZ",
          "content": "This is Xiaoguo Liu from Elastic",
          "index_suffix": "2023.04"
        }
      }
    ]
  }
}

其实安装同样的套路,通过修改 _index,我们可以任意组合我们的索引名称。在生产环境中,我们更希望使用带有日期标签的名称来标识我们的索引!文章来源地址https://www.toymoban.com/news/detail-472525.html

到了这里,关于Elasticsearch:使用 ingest pipeline 来管理索引名称的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 索引管理:使用别名来修改字段类型

    在 Elasticsearch 中,一个常见的问题是如何修改已存在的索引的字段类型。这是一个棘手的问题,因为 Elasticsearch 本身不允许直接修改字段类型。如果删除现有索引,重新建索引的话则会导致数据丢失。有一个方法是使用别名索引,当需要调整索引时可以先新建一个索引,把数

    2024年02月03日
    浏览(35)
  • 使用阿里云试用Elasticsearch学习:1.7 基础入门——索引管理

    我们已经看到 Elasticsearch 让开发一个新的应用变得简单,不需要任何预先计划或设置。 不过,要不了多久你就会开始想要优化索引和搜索过程,以便更好地适合您的特定用例。 这些定制几乎围绕着索引和类型的方方面面,在本章,我们将介绍管理索引和类型映射的 API 以及一

    2024年04月12日
    浏览(34)
  • 使用Elasticsearch进行word,excel,PDF的全文检索 windows实现 超完整(ingest-attachment实现)

    首先要明确的一点就是Elasticsearch的版本要和ingest-attachment的版本一致,要不然没办法安装。然后还有一点JAVA版本要在11以上 先说说原理吧,其实就是将文件base64编码,然后再用插件读取文件内容并保存到es中。 安装完jdk之后用cmd查看一下java -version看看是否已经从1.8修改为了

    2024年02月13日
    浏览(29)
  • Elasticsearch:Simulate ingest API

    Ingest pipeline 为我们摄入数据提供了极大的方便。在我之前的文章中,有非常多的有关 ingest pipeline 的文章。请详细阅读文章 “Elastic:开发者上手指南”。针对一组提供的文档执行摄取管道,可以选择使用替代管道定义。 Simulate ingest API 旨在用于故障排除或管道开发,因为它

    2024年01月24日
    浏览(24)
  • Elasticsearch 索引管理

    创建索引 压缩前准备 压缩前准备工作 副本0; 禁止写; 必须同一个node 从这几点能看出其背后的一些限制 压缩索引 查看设置 是否生效或者有没有其他限制 执行 - 索引压缩 写数据前把禁止写开关去掉 写入数据 查看写入数据 实际上是压缩的分片,并非在原有索引上压缩,而是

    2024年02月11日
    浏览(33)
  • Elasticsearch索引生命周期管理

    数据量非常大 经常访问新增的数据,随着时间的推移,数据的价值也在逐渐降低 随着数据量的增大,Elasticsearch创建索引的数量也在不断增长,这个时候就需要对 索引 进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严

    2024年02月04日
    浏览(29)
  • 一起学Elasticsearch系列-索引管理

    本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 在Elasticsearch中,索引是对数据进行组织和存储的基本单元。索引管理涉及创建、配置、更新和删除索引,以及与索引相关的操作,如数据导入、搜索和聚合等。这些关键任务直接影响着系统性能、数据可用

    2024年02月02日
    浏览(32)
  • Elasticsearch 别名:灵活索引管理的利器

    在现代的大数据应用中,Elasticsearch 以其卓越的全文搜索能力和分布式特性,成为了许多企业和开发者的首选数据存储和查询引擎。在Elasticsearch 的众多功能中,别名(Alias)是一个相对简单但非常实用的特性。通过别名,我们可以更加灵活地管理索引,实现无缝的版本控制、

    2024年02月22日
    浏览(38)
  • Elasticsearch 悬挂索引解析与管理指南

    在 Elasticsearch 的实战中,悬挂索引是一个既常见又容易引起困扰的概念。 今天,我将分享一次处理集群状态为RED,原因为 DANGLING_INDEX_IMPORTED 的实战经验,深入探讨悬挂索引的定义、产生原因、管理方法,以及如何有效处理它们,确保读者能够明白并解决自己面临的问题。 值

    2024年04月08日
    浏览(67)
  • ElasticSearch索引生命周期管理--DELETE

    概要 ElasticSearch中的索引生命周期管理,也就是ilm(Manage the index lifecycle),是指定了索引在不同周期下的处理策略。 ilm 的对象是索引而不是索引中的数据。 ilm 包括四个阶段:hot 、warm、cold和delete。 hot、warm和cold表示索引的使用情况,delete可以指定索引完成rollover后的旧索引

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包