arrays - ElasticSearch-Kibana:按键过滤数组

标签 arrays object elasticsearch kibana

我有一个参数是数组的数据。我知道Kibana不能很好地支持数组中的对象,但是我想知道是否有一种方法可以只用一个键值来过滤该数组。我的意思是 :

这是一个json例子:

{
  "_index": "index",
  "_type": "data",
  "_id": "8",
  "_version": 2,
  "_score": 1,
  "_source": {
    "envelope": {
      "version": "0.0.1",
      "submitter": "VF12RBU1D53087510",
      "MetaData": {
        "SpecificMetaData": [
          {
            "key": "key1",
            "value": "94"
          },
          {
            "key": "key2",
            "value": "0"
          }
        ]
      }
    }
  }
}

而且我只想在我的SpecificMetaData数组中包含包含key1的数据才能进行绘制。现在,当我绘制SpecificMetaData.value时,它将获取数组的所有值(key1和key2的值),并且不建议使用SpecificMetaData.value1和SpecificMetaData.value2。

如果您需要更多信息,请告诉我。谢谢。

最佳答案

您可能需要将数据映射到映射,以便SpecificMetaData充当嵌套过滤器的nested_typeinner_hits可以为您提供具有key1的对象。

PUT envelope_index
{
    "mappings": {
        "document_type": {
            "properties": {
                "envelope": {
                    "type": "object",
                    "properties": {
                        "version": {
                            "type": "text"
                        },
                        "submitter": {
                            "type": "text"
                        },
                        "MetaData": {
                            "type": "object",
                            "properties": {
                                "SpecificMetaData": {
                                    "type": "nested"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

POST envelope_index/document_type
{
    "envelope": {
        "version": "0.0.1",
        "submitter": "VF12RBU1D53087510",
        "MetaData": {
            "SpecificMetaData": [{
                    "key": "key1",
                    "value": "94"
                },
                {
                    "key": "key2",
                    "value": "0"
                }
            ]
        }
    }
 }

POST envelope_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "inner_hits": {},
            "path": "envelope.MetaData.SpecificMetaData",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "envelope.MetaData.SpecificMetaData.key": {
                        "value": "key1"
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }  
}

关于arrays - ElasticSearch-Kibana:按键过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44437940/

相关文章:

arrays - 使用 map 或 slice 进行性能搜索

javascript - 如何将 DIV 的 innerHTML 分配给 DIV 数组

php - 将包含对象的数组展平/简化为数组数组

JavaScript - 特殊的多重继承

c - 如何将一维矩阵拆分为 4 个一维子矩阵?

php - 从 php 对象类返回多个数据库行

object - 如何绕过 'Object' 上不存在的属性

elasticsearch - elasticsearch nest:获取SearchRequest的数字结果

elasticsearch - elasticsearch:如何仅获取归一化分数(_score除以max_score)高于特定阈值的文档

elasticsearch - Logstash:时间戳模式