2017-10-13 3 views
0

Nous avons des scores de tenue d'index ES donnés pour différents produits. Ce que nous essayons de faire est d'agréger sur les noms de produits et ensuite obtenir les scores moyens pour chaque «seau» de nom de produit. Actuellement, la fonctionnalité d'agrégation par défaut ne nous donne que le nombre de chaque seau. Est-il possible de l'étendre pour obtenir un score moyen par nom de produit?Elasticsearch 5 (Searchkick) Aggregation Bucket Moyennes

Nous avons examiné les agrégations de pipeline, mais la documentation est assez dense et ne semble pas correspondre à ce que nous essayons de faire.

est ici où nous avons à:

{ 
    "aggs"=>{ 
    "prods"=>{ 
     "terms"=>{ 
     "field"=>"product_name" 
     }, 
     "aggs"=>{ 
      "avgscore"=>{ 
      "avg"=>{ 
       "field"=>"score" 
       } 
      } 
     } 
     } 
    } 
    } 

Soit cela est faux, ou pourrait-il être qu'il ya quelque chose dans la façon dont searckick compile ses requêtes ES qui est casser des choses?

Merci!

+0

pouvez-vous s'il vous plaît montrer votre requête que vous avez essayé jusqu'à présent – pravindot17

Répondre

0

pense que c'est l'agrégation de pipeline que vous voulez ...

POST /_search 
{ 
    "size": 0, 
    "aggs": { 
    "product_count" : { 
     "terms" : { 
     "field" : "product" 
     }, 
     "aggs": { 
      "total_score": { 
      "sum": { 
      "field": "score" 
      } 
     } 
     } 
    }, 
    "avg_score": { 
     "avg_bucket": { 
     "buckets_path": "product_count>total_score" 
     } 
    } 
    } 
} 

Je espère avoir que dans le bon sens, sinon - passer les deux premiers seaux.