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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值