ES.ingest

需求再多也不能忘记学习。。

  • es的ingest节点,实际上就是对es的文档索引之前做预处理
  • ingest节点默认时在每个节点都开启的,所以可以在每个节点生效,也可以设置单独的节点
  • ingest会拦截index、bluk请求,对请求内容做预处理,将处理完毕后的数据再转发给es,然后进行index或者bluk
  • 下面举个栗子

我们先自定义一个pipeline

PUT _ingest/pipeline/my-pipeline-tag
{
  "processors": [
    {
      "split": {
        "field": "tag",
        "separator": ","
      }
    }
  ],
  "description": "根据tag字段中的英文逗号,将字段分隔成数组"
}

pipeline主要是由两个内容-processors和description两部分组成,我们推上去之后,再进行文档索引或者批处理时指定pipeline-id即可使用这个自定义的ingest

PUT tags/_doc/1?pipeline=my-pipeline-tag
{
  "tag":"PHP,GO,JAVA,PYTHON"
}

结果

{
  "_index" : "tags",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "tag" : [
      "PHP",
      "GO",
      "JAVA",
      "PYTHON"
    ]
  }
}

   我来解释一下,如果不指定pipeline-id, tag字段实际上就是一个字符串,它被es索引后,展示的也将会是一个字符串的形式存储,例如

{
  "_index" : "tags",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "tag" : "PHP,GO,JAVA,PYTHON"
  }
}

但当我们指定一个pipeline-id后,es会先拦截掉这个index请求,然后根据pipeline-id寻找对应的管道,根据管道的规则,对数据进行修改,然后再转发给index\bluk  api 进行数据写入或修改,被修改的tag是按照英文逗号对这个字段进行split, 管道之后这个字段会变为一个数组,并以数组的形式存储进es

在 Elasticsearch 中,Ingest Pipelines 是一种机制,可用于在将文档索引到 Elasticsearch 之前对它们进行处理。这些处理可以包括数据转换、文本解析、数据验证等。Ingest Pipelines 通常用于数据预处理,以便更有效地索引数据,提高搜索性能。 以下是创建 Ingest Pipelines 的步骤: 1. 定义 Pipeline:使用 Elasticsearch 的 Ingest API 定义 Pipeline。您可以使用 PUT 请求来定义 Pipeline,指定 Pipeline 的名称和包含处理步骤的 JSON 配置。 例如,以下是一个简单的 Pipeline,它将从文档中提取 "message" 字段,并将其添加到 "myfield" 字段中: ``` PUT _ingest/pipeline/my-pipeline { "description": "My pipeline", "processors": [ { "set": { "field": "myfield", "value": "{{message}}" } } ] } ``` 2. 测试 Pipeline:使用 Elasticsearch 的 simulate API 测试 Pipeline。您可以使用 POST 请求来测试 Pipeline,指定 Pipeline 的名称和要处理的文档。 例如,以下是一个简单的测试请求,它将使用 "my-pipeline" Pipeline 处理一个包含 "message" 字段的文档: ``` POST _ingest/pipeline/my-pipeline/_simulate { "docs": [ { "_source": { "message": "Hello, World!" } } ] } ``` 3. 应用 Pipeline:将 Pipeline 应用于文档。在索引文档时,您可以使用 "pipeline" 参数指定要使用的 Pipeline。 例如,以下是一个简单的索引请求,它将使用 "my-pipeline" Pipeline 处理一个包含 "message" 字段的文档: ``` PUT my-index/_doc/1?pipeline=my-pipeline { "message": "Hello, World!" } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值