2015-01-02 16 views
8

Ho un indice temporaneo con i documenti che ho bisogno di moderare. Voglio raggruppare questi documenti con le parole che contengono.Elasticsearch - Come ottenere parole popolari elenco dei documenti

Per esempio, ho questi documenti:

1 - "aaa bbb ccc ddd eee fff"

2 - "bbb mmm aaa fff xxx"

3 - "HHH aaa fff"

Quindi, voglio ottenere le parole più popolari, idealmente con conta: "aaa" - 3, "fff" - 3, "bbb" - 2, ecc

questo è possibile con elasticsearch?

risposta

10

Facendo una semplice ricerca di aggregazione termine soddisferà le vostre esigenze:

(dove mydata è il nome del campo)

curl -XGET 'http://localhost:9200/test/data/_search?search_type=count&pretty' -d '{ 
    "query": { 
    "match_all" : {} 
    }, 
    "aggs" : { 
     "mydata_agg" : { 
    "terms": {"field" : "mydata"} 
    } 
    } 
}' 

sarà di ritorno:

{ 
    "took" : 3, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 3, 
    "max_score" : 0.0, 
    "hits" : [ ] 
    }, 
    "aggregations" : { 
    "mydata_agg" : { 
     "doc_count_error_upper_bound" : 0, 
     "sum_other_doc_count" : 0, 
     "buckets" : [ { 
     "key" : "aaa", 
     "doc_count" : 3 
     }, { 
     "key" : "fff", 
     "doc_count" : 3 
     }, { 
     "key" : "bbb", 
     "doc_count" : 2 
     }, { 
     "key" : "ccc", 
     "doc_count" : 1 
     }, { 
     "key" : "ddd", 
     "doc_count" : 1 
     }, { 
     "key" : "eee", 
     "doc_count" : 1 
     }, { 
     "key" : "hhh", 
     "doc_count" : 1 
     }, { 
     "key" : "mmm", 
     "doc_count" : 1 
     }, { 
     "key" : "xxx", 
     "doc_count" : 1 
     } ] 
    } 
    } 
} 
+0

Grazie, questo è una soluzione che ho cercato. Non ho testato la query che hai fornito, ma ho capito cosa devo fare. – oleg

+0

Sono sorpreso che non ruoti attorno all'API di '_mtermvectors' –

Problemi correlati