elasticsearch Elasticsearch Kibana中过滤空或非空数组,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch Elasticsearch Kibana中过滤空或非空数组,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch Elasticsearch Kibana中过滤空或非空数组

elasticsearch Elasticsearch Kibana中过滤空或非空数组,elasticsearch,kibana,elasticsearch,Kibana,如何在Kibana中搜索空数组或非空数组字段?更准确地说:有一个用于查询的api,这些请求/响应都会被记录下来。如果未找到任何元素,则搜索可能会导致空数组:“response:[]”。在其他情况下,“Response”字段是一个填充有对象的数组:“Response:[{“myProp”:“something”},{“myProp”:“something2”}”。 我尝试过使用DSL查询、嵌套搜索和其他Stackoverflow答案,但没有成功。 对于以下情况,我在Kibana DSL查询中发现语

如何在Kibana中搜索空数组或非空数组字段?更准确地说:有一个用于查询的api,这些请求/响应都会被记录下来。如果未找到任何元素,则搜索可能会导致空数组:“response:[]”。在其他情况下,“Response”字段是一个填充有对象的数组:“Response:[{“myProp”:“something”},{“myProp”:“something2”}”。
我尝试过使用DSL查询、嵌套搜索和其他Stackoverflow答案,但没有成功。 对于以下情况,我在Kibana DSL查询中发现语法错误(或我尝试使用的任何其他解决方案):

"must_not": {
  "script": {
    "script": "response.size() > 0"
  }
}
或使用以下命令会导致内部服务器错误:

{
  "script": "response.size > 0"
}

如果您的
响应
字段未定义为,则需要以数组对象的一个键为目标,而不是数组本身。您最好选择一个存在于所有子对象中的键——在您的例子中是
myProp

现在,如果
myProp
有一个

{
“脚本”:{
“脚本”:{
“来源”:“doc['response.myProp'].size()>0”,
“郎”:“无痛”
}
}
}
基本上就是说,看看数组的长度,然后根据它推断父数组的长度



如果你的
响应
确实是,那么它会变得更加狡猾。我在回答以下问题时解释了原因:


但原理是一样的——您可以将嵌套数组对象的内容提取到一个平坦的级别上,这样更容易计算得到的数组长度。

最好的方法是添加另一个包含数组中结果数的整数字段。然后,查询就变成了该字段上的范围查询,检查==0或>0。比搞乱脚本性能更好。现在我对这类对象有了更好的理解。现在创建索引,对我来说已经超出了范围;我无法筛选按预期工作的数据。好的一面是,我没有语法错误,也没有服务器错误,所以这给了我正确的方向。好的,我很高兴你现在有了更好的理解!