elasticsearch-query,Kibana,elasticsearch Query" /> elasticsearch-query,Kibana,elasticsearch Query" />

如何在Kibana中搜索数组的存在性?

如何在Kibana中搜索数组的存在性?,kibana,elasticsearch-query,Kibana,elasticsearch Query,我在Kibana中有一个字段,有时是字符串,有时是数组。 例如: { "fld1": "val1", "fld2": "val2"} { "fld1": "val3", "fld2": [ "val4", "val5" ] } 我想搜索在“fld2”中包含数组的文档 我试过: { "query": { "bool": { "filter": { "script": { "script": { "source"

我在Kibana中有一个字段,有时是字符串,有时是数组。
例如:

{ "fld1": "val1", "fld2": "val2"} 
{ "fld1": "val3", "fld2": [ "val4", "val5" ] }
我想搜索在“fld2”中包含数组的文档

我试过:

{
  "query": {
    "bool": {
      "filter": {
        "script": {
          "script": {
            "source": "doc['fld2'].size > 0",
            "lang": "painless"
          }
        }
      }
    }
  }
}

我想你可以做一些类似的事情:
“source:“如果((ctx.\u source.doc['fld2']instanceof List})){/*在这里做点什么*/},
弹性搜索脚本返回doc['fld2']值的字符串,你必须将其转换为数组以检查大小

{
“查询”:{
“布尔”:{
“过滤器”:{
“脚本”:{
“脚本”:{
“source:“def val=doc['fld2'];val.size()>1”,
“郎”:“无痛”
}
}
}
}
}

}
您尝试过的输出是什么?我收到错误“文本字段默认禁用Fielddata。在[fld2]上设置Fielddata=true,以便通过取消反转索引将Fielddata加载到内存中。请注意,这可能会占用大量内存。或者改为使用关键字字段”,但这似乎是正确的方式,谢谢!您可以更改“fld2”的映射以启用fielddata,如。PUT/_映射{“属性”:{“fld2”:{“类型”:“文本”,“字段数据”:true}}