2014-07-27 12 views
5

In qualche modo io non riesco a ottenere una risposta contenente i miei aggregazioni ...Rails elasticsearch aggregazione

Uso ricciolo funziona come previsto:

HBZUMB01$ curl -XPOST "http://localhost:9200/contents/_search" -d '{ 
    "size": 0, 
    "aggs": { 
    "sport_count": { 
     "value_count": { 
     "field": "dwid" 
     } 
    } 
    } 
}' 

ho la risposta:

{ 
    "took": 4, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 90, 
    "max_score": 0.0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "sport_count": { 
     "value": 399 
    } 
    } 
} 

Tuttavia utilizzando il codice nei binari:

query = '{ 
    "size": 0, 
    "aggs": { 
    "sport_count": { 
     "value_count": { 
     "field": "dwid" 
     } 
    } 
    } 
}' 
@response = Content.search(query).to_json 

e il rendering nel browser

respond_to do |format| 
    format.html do  
    render text: "#{@response}" 
end 

ricevo una risposta vuota:

[ ] 

Come posso stampare le mie aggregazioni qui che ho ottenuto con l'arricciatura?

+2

Qual è la gemma che stai utilizzando per integrare Elasticsearch? – Brary

risposta

11

Ero anche alle prese con questo, ma ora ho scoperto come ottenere i risultati di aggregazione.

Se stai usando i elasticsearch-rail con elasticsearch-modello gemme, quando si esegue un'aggregazione su un modello, è possibile ottenere i secchi come in questo esempio:

agg = Model.search( 
    query: { match: { param: 'value' } }, 
    aggs: {my_aggregation_name: { terms: { field: :my_field} }} 
) 

In il codice di RoR:

agg.response["aggregations"]["my_aggregation_name"]["buckets"] 

Da questo, si otterrà un risultato come questo:

[{"key"=>"banana", 
    "doc_count"=>1963, 
    "score"=>478.30920868573355, 
    "bg_count"=>2152}, 
{"key"=>"potato", 
    "doc_count"=>1212, 
    "score"=>315.68857496078505, 
    "bg_count"=>1243}, ...] 

Allora puoi fare quello che vuoi! Spero possa aiutare!

+1

Sto usando ElasticSearch 2.x, e il _mostly_ di cui sopra ha funzionato per me, ma ho dovuto eseguire 'agg.response.aggregations.my_aggregation_name.buckets'. Il "formato hash" non ha funzionato per me. Inoltre, se vuoi solo restituire i conteggi, puoi passare 'search_type: 'count'' come secondo parametro a' Model # search'. – dignoe

+0

Non penso che abbia a che fare con la versione ES, ma piuttosto con le es-rail e le versioni es-model. Per me, 'Model.search' restituisce gli oggetti Hashie :: Mash, quindi entrambe le sintassi dovrebbero funzionare correttamente. – Robin

Problemi correlati