Elasticsearch,如何返回两个字段的唯一值

标签 elasticsearch distinct

我有一个包含 20 个不同字段的索引。我需要能够提取独特的文档,其中字段“cat”和“sub”的组合是唯一的。 在 SQL 中,它看起来是这样的: select unique cat, sub from table A; 我可以这样对一个字段进行操作:

{
"size": 0,
"aggs" : {
    "unique_set" : {
        "terms" : { "field" : "cat" }
    }
}}

但是如何添加另一个字段来检查两个字段的唯一性?

谢谢

最佳答案

SQL 的 SELECT DISTINCT [cat], [sub] 可以用 Composite Aggregation 来模仿.

{
  "size": 0, 
  "aggs": {
    "cat_sub": {
      "composite": {
        "sources": [
          { "cat": { "terms": { "field": "cat" } } },
          { "sub": { "terms": { "field": "sub" } } }
        ]
      }
    }
  }
}

返回...

"buckets" : [
  {
    "key" : {
      "cat" : "a",
      "sub" : "x"
    },
    "doc_count" : 1
  },
  {
    "key" : {
      "cat" : "a",
      "sub" : "y"
    },
    "doc_count" : 2
  },
  {
    "key" : {
      "cat" : "b",
      "sub" : "y"
    },
    "doc_count" : 3
  }
]

关于Elasticsearch,如何返回两个字段的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393973/

相关文章:

elasticsearch - Kibana用另一个术语选择所有真实值

sql - 如何使用分析获取唯一 ID 的汇总总数?

ElasticSearch 无痛脚本 - 除了最终分数之外输出变量值的方法?

json - Logstash:处理大消息

elasticsearch - Docker 卷访问错误

python - 在Elasticsearch Python客户端中找不到索引的优化功能

sql - PostgreSQL:如何根据 WHERE 子句选择不同的关系并按不同字段排序?

sql - 如何从选择查询中消除重复项?

MYSQL 选择不同的记录分组

sql - 按 XML 的不同大小写排序