如何在 elasticsearch 中聚合一个 'non - keyword' 字段?

How to aggregate a 'non - keyword' field in elasticsearch?

我正在尝试编写一个弹性搜索查询,该查询应列出 document.When 中各个字段所持有的所有不同值,这些字段属于关键字类型,术语聚合查询工作正常,我可以看到buckets.But 中列出的值及其计数,当我查询不同的柑橘类水果类型时,我没有得到任何结果,映射如下所示:

{   
    "vegetables":{
      "type": "text",
      "fields": {
         "keyword" : {
            "type" : "keyword",
            "ignore_above": 256
          }
        }
     }, 
    "fruits": {
        "properties": {
            "citrus": {
                "properties": {
                    "orange": {
                        "type": "long"
                    },
                    "lemon": {
                        "type": "long"
                    },
                    "kiwi": {
                        "type": "long"
                    }
                }
            }
        }
    }
}

我期待的结果是:

"aggregations": {
  "distinct_citrusy_fruits"{
     "buckets" : [
       {
         "key":"oranges",
         "doc_count": 23
       },
       {
         "key":"lemon",
         "doc_count": 21
       },
       {
         "key":"kiwi",
         "doc_count": 23
       }
      ]
   }
}

当我为 "vegetables" 字段(这是一个关键字类型)进行术语聚合时,我能够获得如上所示的桶。 在这种情况下如何获得不同的计数?另外,我没有更改文档格式的选项。

编辑- 到目前为止,我发现的唯一解决方法是调用映射 api,然后在我的代码中解析嵌套的 JSON 以获取键值,如果有更好的解决方案可以,请在此处添加答案。

我认为您不能查询或 运行 字段名称的聚合,只能查询值。 对于水果,我希望有以下映射:

{
    "fruits": {
        "properties": {
            "citrus": {
                "properties": {
                    "kind": {
                        "type": "keyword"
                    },
                    "count": {
                        "type": "long"
                    }
                }
            }
        }
    }
}

也许您可以使用 _field_names 字段,其中包含每个具有值的字段名。 (https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-field-names-field.html)