当前位置:   article > 正文

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

es 截取字符串

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

  1. {
  2. "trigger": {
  3. "schedule": {
  4. "interval": "10s"
  5. }
  6. },
  7. "input": {
  8. "chain": {
  9. "inputs": [
  10. {
  11. "first": {
  12. "http": {
  13. "request": {
  14. "scheme": "http",
  15. "host": "xxxxxxxx",
  16. "port": xxxx,
  17. "method": "get",
  18. "params": {},
  19. "headers": {}
  20. }
  21. }
  22. }
  23. },
  24. {
  25. "second": {
  26. "transform": {
  27. "script": {
  28. "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的时候用我们的新值去覆盖原来的值
  29. "lang": "painless"
  30. }
  31. }
  32. }
  33. },
  34. {
  35. "third": {
  36. "search": {
  37. "request": {
  38. "search_type": "query_then_fetch",
  39. "indices": [
  40. "test_chain_index"
  41. ],
  42. "types": [],
  43. "body": {
  44. "query": {
  45. "bool": {
  46. "filter": [
  47. {
  48. "term": {
  49. "city_name": "{{ctx.payload.second.city}}" //city_name:要过滤的字段名
  50. }
  51. }
  52. ]
  53. }
  54. }
  55. }
  56. }
  57. }
  58. }
  59. }
  60. ]
  61. }
  62. },
  63. "condition": {
  64. "compare": {
  65. "ctx.payload.third.hits.total": {
  66. "gt": 0
  67. }
  68. }
  69. },
  70. "actions": {
  71. "log_error": {
  72. "logging": {
  73. "level": "info",
  74. "text": "xxxxxxxxxxxx"
  75. }
  76. }
  77. }
  78. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/132658
推荐阅读