elasticsearch watcher chain input截取字符串并引用参数

需求:在es的watcher中想使用chain input,第一个Input使用http input,然后对response中的数据进行部分截取作为第二个Input中的参数。官方提供的一种方法是在第一个input和第二个input中间加一个transform的script对数据进行处理再进入第二个input。但是这里我们想要分割字符串获取其中的某个值时,通常会使用split方法,但是在es的script中使用painless时,split使用了正则表达式,而es中默认是不开启正则表达式的,因为开启后会造成性能问题。所以结合业务需求,我们采用lastIndexOf的方法来截取字符串。

{
    "trigger": {
      "schedule": {
        "interval": "10s"
      }
    },
    "input": {
      "chain": {
        "inputs": [
          {
            "first": {
              "http": {
                "request": {
                  "scheme": "http",
                  "host": "xxxxxxxx",
                  "port": xxxx,
                  "method": "get",
                  "params": {},
                  "headers": {}
                }
              }
            }
          },
          {
            "second": {
              "transform": {
                "script": {
                  "source": "def myString = ctx.payload.first.city;def beginIdex = myString.lastIndexOf('-');def subString = myString.substring(beginIndex-3,beginIndex);return ['city' : subString];",     //city是http response中的一个key,通过这种方式获取Json中对应的value.  return的时候用我们的新值去覆盖原来的值
"lang": "painless"
                }
              }
            }
          },
          {
            "third": {
              "search": {
                "request": {
                  "search_type": "query_then_fetch",
                  "indices": [
                    "test_chain_index"
                  ],
                  "types": [],
                  "body": {
                    "query": {
                      "bool": {
                        "filter": [
                          {
                            "term": {
                              "city_name": "{{ctx.payload.second.city}}"   //city_name:要过滤的字段名
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        ]
      }
    },
    "condition": {
      "compare": {
        "ctx.payload.third.hits.total": {
          "gt": 0
        }
      }
    },
    "actions": {
      "log_error": {
        "logging": {
          "level": "info",
          "text": "xxxxxxxxxxxx"
        }
      }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值