带中间数组的ElasticSearch监视器链输入

whhtz7ly  于 2023-11-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(168)

提问

我是chaining不同的elasticsearch查询在一个观察者。我短我想这样做:

  • 查找container_id
  • 对具有任何这些container_id的所有条目运行查询

第一个查询给了我一个数组。所以我想把这个数组作为输入传递给terms query。问题是ctx.payload...变量似乎只在字符串内扩展。

"query": {
  "terms" : {
    "container_id" : ctx.payload.first_query._value,
  }
}

字符串
会给我给予错误,例如:
无法识别的令牌“ctx”
有没有一种方法可以插入一个数组而不扩展为一个字符串?如果我使用“ctx.payload.first_query._value”,他将查询字符串"[id1, id2]".

当前解决方案

我目前已经实现了一个通过正则表达式传递的解决方案,但这似乎有点笨拙:

"input": {
  "chain": {
    "inputs" : [ {
      "container_ids" : {
        ...
      }
    }, {
      "container_id_regex": {
        "transform" : {
          "script": """
            def container_id_rexexp = "";
            def regexp_separator = "";
            for(def hit : ctx.payload.container_ids.hits.hits){
              container_id_rexexp += regexp_separator + hit._source.container_id;
              regexp_separator = "|";
            }
            return container_id_rexexp;
          """
        }
      }
    }, {
      "container_details": {
        "search": {
          "request": {
            ...
            "body": {
              "query": {
                "regexp": {
                  "container_id": {
                    "value": "{{ '{{ctx.payload.container_id_regex._value}}' }}"
                  }
                }
              }
            }
          }
        }
      }
    } ]
  }
}

wj8zmpe1

wj8zmpe11#

在第二个链接输入中,您可以使用“template”选项和“#toJson”特殊的mustache标记。使用“#toJson”标记,您可以按原样注入JSON结构,如数组。
下面是一个例子:

"input": {
    "chain" : {
      "inputs" : [ 
        {
          "first" : {
            "simple" : {
              "my_array" : ["VALUE1", "VALUE2"]
            }
          }
        },
        {
          "second" : {
            "search": {
              "request": {
                "template": {
                  "source": """{
                    "size": 0,
                    "query": {
                      "terms": {
                        "my_field": {{#toJson}}ctx.payload.first.my_array{{/toJson}}
                      }
                    }
                  }"""
                },
                "indices": [
                  "my_index"
                ]
              }
            }
          }
        }
      ]
    }
  }

字符串

相关问题