2017-09-15 3 views
0

J'ai quelques données:recherche élastique regroupant des valeurs uniques

[{ 
    "article_id": 257710962, 
    "category_id": "category1" 
}, 
{ 
    "article_id": 257710962, 
    "category_id": "category2" 
}, 
{ 
    "article_id": 257713968, 
    "category_id": "category3" 
}, 
{ 
    "article_id": 257717376, 
    "category_id": "category4" 
}] 

Comment dois-je faire une requête pour obtenir un tel résultat

[{ 
    "article_id": 257710962, 
    "category_id": ["category1", "category2"] 
}, 
{ 
    "article_id": 257713968, 
    "category_id": "category3" 
}, 
{ 
    "article_id": 257717376, 
    "category_id": "category4" 
}] 

je dois faire cette requête parce que je suis à l'aide pagination sur ma page. Donc, c'est un must pour éviter la duplication. (J'utilise article_id comme ma clé primaire)

Répondre

0

Si chaque source de document comme celui-ci

"_source": { 
       "article_id": 257710962, 
       "category_id": "category2" 
      } 

alors vous pouvez essayer Conditions d'agrégation avec Top hits agrégation

GET /my_index/my_type/_search 
{ 
    "size": 0, 
    "aggs": { 
     "agg1": { 
     "terms": { 
      "field": "article_id" 
     }, 
     "aggs": { 
      "agg2": { 
       "top_hits": {} 
      } 
     } 
     } 
    } 
} 

pour plus de précision: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

+0

que diriez-vous de la "de" clé? pour la pagination – kudaponi

+0

Je ne pense pas qu'en cas d'agrégation, la touche 'from' fonctionnera. vous devez deviner la taille fiable du nombre total de résultats attendus, puis passer paramètre _'size'_ dans les termes tableau [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations -bucket-terms-agrégation.html # recherche-agrégations-seau-termes-agrégation-chiffres-approximatifs] – torzonhot