使用elasticsearch计算非重复值

j8yoct9x  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(5)|浏览(139)

我正在学习ElasticSearch,想计算不同的值。到目前为止,我可以计数值,但不能区分。
以下是示例数据:

curl http://localhost:9200/store/item/ -XPOST -d '{
  "RestaurantId": 2,
  "RestaurantName": "Restaurant Brian",
  "DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'

curl http://localhost:9200/store/item/ -XPOST -d '{
  "RestaurantId": 1,
  "RestaurantName": "Restaurant Cecil",
  "DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'

curl http://localhost:9200/store/item/ -XPOST -d '{
  "RestaurantId": 1,
  "RestaurantName": "Restaurant Cecil",
  "DateTime": "2013-08-16T15:13:47.4833748+01:00"
}'

到目前为止,我所尝试的是:

curl -XPOST "http://localhost:9200/store/item/_search" -d '{
  "size": 0,
  "aggs": {
    "item": {
      "terms": {
        "field": "RestaurantName"
      }
    }
  }
}'

输出量:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 0.0,
    "hits": []
  },
  "aggregations": {
    "item": {
      "buckets": [
        {
          "key": "restaurant",
          "doc_count": 3
        },
        {
          "key": "cecil",
          "doc_count": 2
        },
        {
          "key": "brian",
          "doc_count": 1
        }
      ]
    }
  }
}

如何将cecil的计数设为1而不是2

guz6ccqo

guz6ccqo1#

你必须使用基数选项,如@coder所提到的,你可以在doc中找到

$ curl -XGET "http://localhost:9200/store/item/_search" -d'
{
"aggs" : {
    "restaurant_count" : {
        "cardinality" : {
            "field" : "RestaurantName",
            "precision_threshold": 100, 
            "rehash": false 
            }
          }
         }
}'

这对我很有效。。

bakd9h0s

bakd9h0s3#

现在我为原作者回答这个问题已经太晚了,但是对于任何面临同样问题并到达这里的人来说,我的回答可能会有所帮助。
ES提供了基数以确保获得不重复计数,但它并不准确。为了准确,可以使用适当的解决方案。我写了一篇文章,可能会有帮助:Accurate Distinct Count and Values from Elasticsearch

2guxujil

2guxujil4#

在ElasticSearch中不支持非重复计数,尽管存在非确定性计数。使用“terms”聚合并计算结果中的桶数。请参阅ElasticSearch问题上的不同计数。

dldeef67

dldeef675#

使用基数功能:文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html
范例:

"aggs": {
                "unquieValues": {
                  "cardinality": {
                    "field": "ourUniqueId.keyword",
                    "precision_threshold": 100
                  }
                }
              }

相关问题