弹性搜索的数量不同

时间:2017-03-19 10:30:14

标签: elasticsearch elasticsearch-plugin

如何使用sql4es驱动程序在弹性搜索类型上实现计数不同的函数?

Select distinct inv_number , count(1) from invoices;

但它返回特定发票号的总计数。

4 个答案:

答案 0 :(得分:2)

因为,OP正在使用 sql4es jdbc驱动程序,他要求为他的用例进行SQL查询:

SELECT COUNT(DISTINCT inv_number) from invoices;

它返回指定列的不同值的数量

答案 1 :(得分:0)

  {
      "size": 0, 
      "aggs": {
        "total_invoices": {
          "terms": {
            "field": "inv_number" 

        },
        "aggs": {
          "unique_invoiceid": {
            "cardinality": {
              "field": "inv_number"
            }
          }
        }
      }
    }

这会在 unique_invoiceid

中为您提供的发票号码和分心价值

答案 2 :(得分:0)

Elasticsearch不支持确定性DISTINCT计数(source)。它仅支持大致不同的计数器,如"cardinality"。 以确定性方式计算区别的一种方法是使用“术语”聚合它们并从结果中计算桶。

答案 3 :(得分:0)

这应该可以计算出完全不同的值:

curl -X POST "localhost:9200/invoices/_search?size=0&pretty" -H 'Content-Type: application/json' -d '{
"aggs" : {
    "types_count" : {
      "value_count" : { "field" : "inv_number" }
    },
    "group_by_status": {
      "terms": {
        "field": "inv_number"
      }
    }
}

}'