从 elasticsearch 索引中获取嵌套映射的类型

Get nested mappings' types from elasticsearch index

我有一个 elasticsearch 索引,其映射如下:

{
  "indexName": {
    "mappings": {
      "vault": {
        "properties": {
          "someMapping": {
            "dynamic": "true",
            "properties": {
              "A": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "B": {
                "type": "float"
              },
              "C": {
                "type": "float"
              }
            }
          }
        }
      }
    }
  }
}

我需要获取嵌套映射的类型,例如:

   [
     {Name = "A", Type = "text"},
     {Name = "B", Type = "float"},
     {Name = "C", Type = "float"}
    ]

我需要通过 .NET Core 应用程序中的 NEST API 实现这一点。 到目前为止,我已经尝试 elasticClient.GetMapping(new GetMappingRequest()) 但收效甚微,因为我无法访问我需要的字段的嵌套属性(在此示例中 "someMapping")

我通过以下步骤实现了我想要的:

  • 通过以下方式获取弹性搜索实例中所有索引的映射:allIndicesMappings = elasticClient.GetMapping(new GetMappingRequest()).Mappings
  • 按名称过滤您想要的索引(可选)
  • 对于筛选列表中的每个项目,您都可以获得所需的字段,如下所示: item.Value.FirstOrDefault().Value.Properties.FirstOrDefault(x => x.Key.Name == "someMapping").Value returns someMapping 字段,但我们仍然无法访问它的嵌套属性。我们可以通过将其转换为 ObjectProperty 来获得访问权限,如下所示: ((ObjectProperty)item.Value.FirstOrDefault().Value.Properties.FirstOrDefault(x => x.Key.Name == "metadata").Value).Properties Properties 现在我们有了嵌套字段及其映射