web-dev-qa-db-fra.com

Compter des valeurs distinctes à l'aide de elasticsearch

J'apprends la recherche élastique et aimerais compter des valeurs distinctes. Jusqu'à présent, je peux compter des valeurs mais pas distinctes.

Voici les exemples de données:

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"
}'

Et ce que j'ai essayé jusqu'à présent:

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

Sortie:

{
  "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
        }
      ]
    }
  }
}

Comment puis-je compter cecil comme 1 au lieu de 2

10
Developer

Vous devez utiliser l’option de cardinalité mentionnée par @coder que vous pouvez trouver dans le doc

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

Cela a fonctionné pour moi ...

5
c24b
4
coder

ElasticSearch ne prend pas en charge le comptage distinct, bien qu'il existe un comptage non déterministe. Utilisez l'agrégation de "termes" et comptez les compartiments dans le résultat. Voir Compte distinct sur recherche élastique question. 

0
asu