elasticsearch唯一值聚合

时间:2015-09-15 11:01:54

标签: elasticsearch aggregation

我想在名为“name”的字段中获取elasticsearch的唯一值, 我不知道如何将条件放在值必须唯一的条件下。

这项工作的目的是从elasticsearch数据库中获取所有唯一名称。

So basically what i need is a aggregation query that fetch the unique values

有人可以帮助我解决这个问题,非常感谢先进。

1 个答案:

答案 0 :(得分:1)

您可以在terms字段上使用not_analyzed聚合。

但是,默认情况下,这仅限于10个最受欢迎的术语。您可以通过更新size聚合的terms参数来更改此设置。将其设置为0,您最多可以使用Integer.MAX_VALUE个不同的字词(请参阅文档here)。

以下是一个示例映射:

POST terms
{
  "mappings":{
    "test":{
      "properties":{
        "title":{
          "type":"string",
          "index":"not_analyzed"
        }
      }
    }
  }
}

添加一些文件:

POST terms/test
{
  "title":"Foundation"
}


POST terms/test
{
  "title":"Foundation & Empire"
}

最后,请求:

POST terms/_search?search_type=count
{
  "aggs": {
    "By Title": {
      "terms": {
        "field": "title",
        "size": 0
      }
    }
  }
}

将为您提供所需的信息:

"aggregations": {
      "By Title": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "Foundation",
               "doc_count": 1
            },
            {
               "key": "Foundation & Empire",
               "doc_count": 1
            }
         ]
      }
   }

请注意,如果您拥有大量条款,则此请求将非常昂贵来执行。