如何在elasticsearch中聚合“非关键字”字段?

时间:2019-05-29 16:06:39

标签: java elasticsearch kibana elastic-stack elasticsearch-aggregation

我正在尝试编写一个弹性搜索查询,该查询应列出文档中各个字段保留的所有不同值。当字段为关键字类型时,术语聚合查询可以正常工作,并且我可以看到带有其计数的值但是,当我查询不同的柑橘类水果类型时,没有任何结果,映射如下所示:

{   
    "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
       }
      ]
   }
}

当我为“蔬菜”字段(这是一种关键字类型)进行术语汇总时,我能够如上所述获得存储桶。 在这种情况下,如何获取不同的计数?此外,我没有选择更改文档格式的选项。

1 个答案:

答案 0 :(得分:0)

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

{
    "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