2016-09-07 2 views
0

J'ai un index de base avec les journauxElasticSearch - Count distinct

Certains journaux sont visite de user1 à USER2

J'ai réussi à compter le total des visites a reçu un utilisateur, mais je ne sais pas comment compter le total d'utilisateurs distincts un utilisateur a reçu enter image description here

Cela me donne tous les journaux pour un utilisateur

{ 
    "post_filter":{ 
     "bool":{ 
      "must":[ 
       { 
        "term":{ 
         "message":"visit" 
        } 
       }, 
       { 
        "term":{ 
         "ctxt_user2":"733264" 
        } 
       } 
      ] 
     } 
    }, 
    "query":{ 
     "match_all":{} 
    } 
} 

en fait, j'utilise FoSElastica Bundle pour Symfony2

$filter->addMust((new Term())->setTerm('message', 'visit')); 
$filter->addMust((new Term())->setTerm('ctxt_user2', $this->search->getVisit())); 

Je lis quelques pages dans le document ES avec aggrégateur, mais je ne réussi à obtenir ce que je veux

Convertir en SQL, j'ai juste besoin

SELECT COUNT(DISCTING ctxt_user1) 
FROM logs 
WHERE ctxt_user2 = 733264 

EDIT :

La cardinalité est ce dont j'ai besoin. Maintenant juste besoin de trouver comment l'utiliser avec FosElasticaBundle

"aggs": { 
    "yourdistinctcount": { 
     "cardinality": { 
      "field": "ctxt_user1" 
     } 
    } 
} 

Répondre

0

Essayez cette requête (non testé ...):

{ 
"query" : { 
"bool":{ 
     "must":[ 
      { 
       "term":{ 
        "message":"visit" 
       } 
      }, 
      { 
       "term":{ 
        "ctxt_user2":"733264" 
       } 
      } 
     ] 
    } 
}, 
"aggs": { 
    "yourdistinctcount": { 
    "terms": { 
     "field": "ctxt_user1" 
    } 
    } 
} 
} 

La requête post_filter ne peut pas être utilisé dans votre cas. Comme il écrire sur le site Elastic.co: Le post_filter est appliqué à la recherche touche à la fin d'une demande de recherche, après agrégations ont déjà été calculated.`

HtH,

+0

Malheureusement, je reçois toujours les 3 lignes qui contient "733264" dans ctxt_user2 :( – Bouffe

+1

le résultat se trouve sur le résultat non sur les résultats Si vous voulez désactiver le résultat de recherche ajouter "taille": 0 avant "requête" – NicolasY

+0

Oh, je ne le savais pas! Mais "agrégations": { "yourdistinctcount": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "godets" : [{ "clé": 18475, "doc_count": 3} ] }} – Bouffe