2017-09-15 1 views
0

Ich habe einige Daten:Elasticsearch Gruppierung eindeutige Werte

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

Wie soll ich eine Abfrage für immer ein Ergebnis wie dieses

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

mache ich diese Abfrage tun müssen, weil ich verwende Paginierung auf meiner Seite. Es ist also ein Muss, Doppelarbeit zu vermeiden. (Ich verwende den article_id als meine primäre Schlüssel)

Antwort

0

Wenn jedes Dokument Quelle wie dieses ist

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

dann können Sie Bedingungen Aggregation mit Top versuchen trifft Aggregation

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

zur weiteren Erläuterung: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

+0

Wie wäre es mit der "Von" -Taste? für die Paginierung – kudaponi

+0

Ich denke nicht im Falle der Aggregation _'from'_ Taste funktioniert. Sie müssen zuverlässige Größe der Gesamtzahl der erwarteten Ergebnis erraten, dann übergeben Sie _'size'_ Parameter im Begriff Array [https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations -bucket-terms-aggregation.html # Suche-Aggregationen-Bucket-Terms-Aggregation-Approaching-Counts] – torzonhot