Bonjour à tous,
J'essaie de monter des requêtes relativement complexes sous ElasticSearch et de récupérer des aggregations a partir de ces dernières.
Autant le doc_count des aggregations est bon, autant les buckets sont complètement faux.
Voici ma requête :
{
"query": {
"has_child": {
"type": "transaction",
"query": {
"bool": {
"must": [
{
"term": {
"transaction.products.pid": "66130766378"
}
},
{
"range": {
"transaction.date": {
"gt": "now-14d"
}
}
}
],
"must_not": []
}
}
}
},
"aggs": {
"most_bought": {
"children": {
"type": "transaction"
},
"aggs": {
"productFilter": {
"filter": {},
"aggs": {
"products": {
"terms": {
"field": "transaction.products.pid"
}
}
}
}
}
}
}
}
En gros, je demande, pour les utilisateurs qui ont acheté ce produit (has_child), quels sont les produits achetés (aggs).
Voici le résultat que j'obtiens :
{
"took":2,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"failed":0
},
"hits":{
"total":5,
"max_score":1,
"hits":[
{
"_index":"twiga_v4",
"_type":"user",
"_id":"AU2aCDIqmTOfL8aT6oxI",
"_score":1,
"_source":{
"cookies":[
"1432808336328698032885"
],
"localuid":[
],
"iplocation":[
],
"date":"2015-05-28T10:19:14.637Z"
}
},
{
"_index":"twiga_v4",
"_type":"user",
"_id":"AU2aB5mbmTOfL8aT6ow2",
"_score":1,
"_source":{
"cookies":[
"1432808296854342757903"
],
"localuid":[
],
"iplocation":[
],
"date":"2015-05-28T10:18:45.792Z"
}
},
{
"_index":"twiga_v4",
"_type":"user",
"_id":"AU2aCbwamTOfL8aT6oxu",
"_score":1,
"_source":{
"cookies":[
"1432808436584201734440"
],
"localuid":[
],
"iplocation":[
],
"date":"2015-05-28T12:18:14.882Z"
}
},
{
"_index":"twiga_v4",
"_type":"user",
"_id":"AU2adbIVmTOfL8aT6pMD",
"_score":1,
"_source":{
"cookies":[
"1432815512824511789572"
],
"localuid":[
],
"iplocation":[
],
"date":"2015-05-28T12:19:28.764Z"
}
},
{
"_index":"twiga_v4",
"_type":"user",
"_id":"AU2aeluBmTOfL8aT6pNu",
"_score":1,
"_source":{
"cookies":[
"1432815818378397089816"
],
"localuid":[
],
"iplocation":[
],
"date":"2015-05-28T12:46:32.948Z"
}
}
]
},
"aggregations":{
"most_bought":{
"doc_count":5,
"productFilter":{
"doc_count":5,
"products":{
"doc_count_error_upper_bound":0,
"sum_other_doc_count":0,
"buckets":[
{
"key":"24143302320",
"doc_count":1
},
{
"key":"66130766378",
"doc_count":1
}
]
}
}
}
}
}
ElasticSearch me retourne 2 buckets (ils devrait y en avoit beaucoup plus), avec seulement 1 résultat pour chaque, alors que l'ID 66130766378 est présent 5 fois dans les types transactions. D'ailleurs, le comptage fait au niveau de l'aggregation productFilter est correct !
Quelqu'un a un retour d'expérience sur le sujet ?
En vous remerciant par avance.