查找不同的值,而不是弹性搜索中的不同计数

jas*_*siu 33 distinct elasticsearch

Elasticsearch文档 提示*他们的代码

*文件已修复

GET /cars/transactions/_search?search_type=count
{
  "aggs": {
    "distinct_colors": {
      "cardinality": {
        "field": "color"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

对应于sql查询

SELECT DISTINCT(color) FROM cars
Run Code Online (Sandbox Code Playgroud)

但它实际上对应于

SELECT COUNT(DISTINCT(color)) FROM cars
Run Code Online (Sandbox Code Playgroud)

我不想知道我有多少不同的值,但有什么不同的值.谁知道如何实现这一目标?

And*_*fan 34

在字段上使用术语聚合color.并且您需要注意分析您想要获得不同值的字段的方式,这意味着您需要确保在索引时不对其进行标记,否则聚合中的每个条目都将是一个不同的术语,现场内容.

如果您仍然希望使用标记化AND来使用terms聚合,则可能需要查看not_analyzed该字段的索引类型,并且可能使用多字段.

汽车条款汇总:

GET /cars/transactions/_search?search_type=count
{
  "aggs": {
    "distinct_colors": {
      "terms": {
        "field": "color",
        "size": 1000
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Ort*_*kni 27

为了更新Andrei Stefan的优秀答案,我们需要说search_type=countElasticsearch 5中不再支持查询参数.这样做的新方法是"size" : 0在主体中添加如下:

GET /cars/transactions/_search
{
  "size": 0,
  "aggs": {
    "distinct_colors": {
      "terms": {
        "field": "color",
        "size": 1000
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 1000意味着什么? (4认同)
  • 如果分析字段(在本例中为"color"),则需要引用`keyword`字段.ES将显示"illegal_argument_exception"错误,并显示消息"默认情况下在文本字段上禁用字段数据..."在这种情况下,而不是""字段":"颜色",`,它应该说""字段":" color.keyword",` (3认同)
  • 默认情况下,术语聚合仅返回10个桶."size"指定响应中所需的桶数.请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size (2认同)