2015-05-26 17 views
9

Sono novizio in ElasticSearch.Elastic Search Sum aggregazione con gruppo per e dove condizione

Attualmente stiamo spostando il nostro codice dal DB relazionale a ElasticSearch. Quindi stiamo convertendo le nostre query nel formato di query ElasticSearch.

Cerco elasticsearch equivalente di sotto di query -

SELECT Color, SUM(ListPrice), SUM(StandardCost) 
FROM Production.Product 
WHERE Color IS NOT NULL 
    AND ListPrice != 0.00 
    AND Name LIKE 'Mountain%' 
GROUP BY Color 

Qualcuno mi può fornire l'esempio di interrogazione elasticsearch per di cui sopra?

risposta

18

si avrebbe un indice products con product documenti tipo la cui mappatura potrebbe assomigliare a questo, sulla base di query di cui sopra:

curl -XPUT localhost:9200/products -d ' 
{ 
    "mappings": { 
    "product": { 
     "properties": { 
     "Color": { 
      "type": "string" 
     }, 
     "Name": { 
      "type": "string" 
     }, 
     "ListPrice": { 
      "type": "double" 
     }, 
     "StandardCost": { 
      "type": "double" 
     } 
     } 
    } 
    } 
}' 

Poi la query ES equivalente a quello di SQL avete dato sopra sarebbe simile this:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "default_field": "Name", 
      "query": "Mountain*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "missing": { 
       "field": "Color" 
       } 
      }, 
      { 
       "term": { 
       "ListPrice": 0 
       } 
      } 
      ] 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "by_color": { 
     "terms": { 
     "field": "Color" 
     }, 
     "aggs": { 
     "total_price": { 
      "sum": { 
      "field": "ListPrice" 
      } 
     }, 
     "total_cost": { 
      "sum": { 
      "field": "StandardCost" 
      } 
     } 
     } 
    } 
    } 
} 
+0

Grazie. ha funzionato. –

+0

Come ordinare sulla somma dell'aggregazione? Fondamentalmente per ordinare per total_price in questo esempio? –

+0

@ErdalG. Nell'aggregazione 'terms' puoi aggiungere questo:' "order": {"total_price": "desc"} ' – Val

Problemi correlati