COUNT og GROUP BY i Elasticsearch søgning

Hvis du har brug for at kunne tælle antallat af dokumenter ud fra noglel kriterier, vil man jo i SQL benytte COUNT og GROUP BY, men dette er ikke helt så nemt i Elasticsearch.

SELECT COUNT(*) FROM min_table WHERE status='active" AND type=2 GROUP BY user_id;

Men her er et eksempel på hvordan det kan lade sig gører.

{
        "size" : 0,
        "query" : {
                "bool" : {
                        "filter" : [
                                { "term" : { "status" : "active" } },
                                { "term" : { "type" : "2"} }
                        ]
                }
        },
        "aggs" : {
                "antal" : {
                        "terms" : { "field" : "user_id" }
                }
        }
} 

I dette eksempel finder vi alle dokumnter som har status = active og type = 2. Dem laver vi så en aggeration på user_id.
Samtidig har jeg sat size til 0, dette vil gøre at vi ikke får andet tilbage end aggerationens retultat.

Leave a comment

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *