2014-07-09 11 views
7

Ich lerne elastische Suche und möchte verschiedene Werte zählen. Bisher kann ich Werte zählen, aber nicht eindeutig. HierZählen Sie verschiedene Werte mit elasticsearch

ist die Beispieldaten:

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

Und was habe ich versucht, so weit:

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

Ausgang:

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

Wie kann ich Zahl von cecil als 1 erhalten statt von 2

Antwort

4
+0

Ich habe sogar versucht: curl -XPOST "http: // localhost: 9200/speichern/item/_search" -d '{"size": 0, "aggs": {"item": {"cardinality": { "field": "RestaurantName"}}}} aber keine eindeutige Anzahl erhalten – Developer

+0

Sollte Curl -XGET sein? – c24b

+0

und ist es in Ordnung, das Aggregat als Element umzubenennen? – c24b

3

Sie haben Mächtigkeit Option zu verwenden, wie von @coder erwähnt, die Sie im doc

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

Dieser arbeitete für mich finden können ...

0

Es gibt keine Unterstützung für das getrennte Zählen in ElasticSearch, obwohl nichtdeterministisches Zählen existiert. Verwenden Sie "Begriffe" Aggregation und zählen Buckets im Ergebnis. Siehe Count distinct on elastic search Frage.