J'ai un index et je veux obtenir un compte pour les entrées de chaque type d'index particulier à Elasticssearch, mais peut ne pas connaître les types à l'avance.
Donc, par exemple, l'index est
/events
et les types pourraient être
/events/type1
/events/type2
...
/events/typeN
Et j'aimerais interroger l'index et dire "Donnez-moi le nombre de types de types sous les événements d'index", alors peut-être un résultat comme
/events/type1 : 40
/events/type2: 20
/events/typeN: 10
où/événements/_Count me donnerait
/events: 70
éditer:
la réponse d'Imotov est géniale. Je rencontre des difficultés à comprendre comment travailler avec JavaScript/Ajax facilement. J'ai quelque chose comme ça en ce moment:
$.ajax({
type: 'GET',
url: 'http://localhost:9200/events/_search?search_type=count',
data: '{ "facets" : { "count_by_type" : { "terms" : { "field": "_type" }}}}',
success: function(text) {
console.log(text);
}
)}'
Mais je ne reçois que le nombre total d'éléments dans l'ES, la partie des facettes de la réponse semble manquante.
Vous pouvez utiliser des agrégations de termes sur le _type
Champ pour obtenir cette information:
curl "localhost:9200/test-idx/_search?search_type=count" -d '{
"aggs": {
"count_by_type": {
"terms": {
"field": "_type"
}
}
}
}'
Pour Elasticsearch V5.0, Search_Type = Nombre est supprimé. La même requête des réponses ci-dessus peut être écrite comme suit:
GET indexname/_search
{
"aggs": {
"count_by_type": {
"terms": {
"field": "_type"
}
}
},
"size": 0
}
Les "facettes" sont obsolètes en ES v. 1.5+ Cependant, vous pouvez utiliser des "agrégations", l'utilisation et les résultats sont assez similaires:
curl "localhost:9200/events/_search?search_type=count" -d '{
"aggregations": {
"count_by_type": {
"terms": {
"field": "_type"
}
}
},
"size": 0
}'
Vous obtiendrez quelque chose comme:
{
"took": 21,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"failed": 0
},
"hits": {
"total": 150,
"max_score": 0,
"hits": []
},
"aggregations": {
"count_by_type": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "type1",
"doc_count": 141
},
{
"key": "type2",
"doc_count": 6
},
{
"key": "other_type",
"doc_count": 3
}
]
}
}
}
Les réponses de @askshay et @roberto mettent en évidence un autre aspect important. La taille de la taille de 0 est vraiment importante, en particulier dans les cas d'utilisation de la bande passante (par exemple dans les réseaux mobiles). Il réduit la taille de la charge utile de données et qui fait une énorme différence lorsque la taille du document est grande. NOTE "Taille":
GET index/_search
{
"aggs": {
"countByType": {
"terms": {
"field": "_type"
}
}
},
"size": 0
}