麋鹿。找不到嵌套值

ELK. Nested values are not found

我有如下索引映射:

 {
  "mapping": {
    "properties": {
      "MyMapProperty": {
        "type": "nested",
        "properties": {
          "first": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "second": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
        }
      },
      "SecondProperty": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "ThirdProperty": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "Timestamp": {
        "type": "date"
      }
    }
  }
}

添加新文档后,源码如下:

{
  "_index": "indexName",
  "_type": "_doc",
  "_id": "idlklkm43rgre",
  "_version": 1,
  "_score": 0,
  "_source": {
      "MyMapProperty": {
        "first": "value1",
        "second": "value2",
      },
      "SecondProperty": "value3",
      "ThirdProperty": "value4",
    },
    "fields": {
    "Timestamp": [
      "2020-05-11T12:54:49.049Z"
    ]
  }
}

所以我实际上在 Kibana 中看到了可用字段: MyMapProperty.fist | MyMapProperty.second |第二个属性 |第三属性

问题是,当我尝试搜索 MyMapProperty.fist : value - 它什么也没找到...但是,如果我将搜索 SecondProperty : value3 - 它 returns 结果。

我想了解我做错了什么,是 kibana 问题还是 elastic search,或者我执行了一些奇怪的操作。能否请您指教...

在 ES 7.6 之前,无法在 Kibana 中搜索嵌套字段。从 ES 7.6 开始,现在 possible to do so 使用特定的搜索语法,如下所示:

MyMapProperty:{ first:value }

你可以试试看

注意:这仅适用于 KQL 而不适用于 Lucene,因为 Lucene 表达式语言 doesn't support nested fields

解决方案是从 "MyMapProperty" 的索引定义中删除类型。

"type": "nested"

之后嵌套的属性变得可以搜索...