7,540
edits
Changes
→Aggregáció
===Metrika aggregáció===
A metrika aggregációk olyan függvények, amik a dokumentumok bizonyos mezőinek az értékein valamilyen művelet hajtanak végre, tipikusan ezek numerikus mezők, a végeredmény egy vagy több szám. Pl a legegyszerűbb metrika aggregáció az átlag kiszámítása. Az aggregációt lehet keresési eredményekre alkalmazni, vagy más aggregációk kimenetére, és a kimenetet is fel lehet használni további aggregációkhoz, lekérdezésekhez.
* single-value numeric metrics aggregation
* multi-value numeric metrics aggregation
A metrikáknak aggregációnak az alábbi a szintaksisa:
<syntaxhighlight lang="C++">
POST 192.168.123.71:9200/<kereső kifejezés>
{
"aggs" : {
"<aggregáció neve>" : { "<aggregáció típusa>" : { "field" : "<mező név>" } }
}
}
</syntaxhighlight>
A végeredmény is egy dokumentum lesz, amiben lesz egy mező név a metrika nevével, amit itt megadtunk a lekérdezésben. Azt hogy ez a lekérdezés egy aggregáció lesz, azt az '''aggs''' kulcsszó jelöli
Számoljuk ki, hogy a '''bank''' indexben tárolt ügyfeleknek mekkora az átlagéletkora. Ez egy '''single-value numeric metrics aggregation''', amiben az '''avg''' függvényt fogjuk használni az '''age''' mezőre. A '''size=0'''-val azt érjük el, hogy a '''_search'''-el megtalált dokumentumokat ne adja vissza, csak az aggregáció végeredményét. Alapértelmezetten az első 10 találatot adná vissza, ahogy azt már láttuk, és a végére tenni oda az aggregáció eredményét. Az aggregációnk neve avg_age lesz, ide bármilyen nevet meg lehet adni, ezzel a névvel lesz a végeredmény a válaszban. Tudjuk hogy a '''bank''' indexben lévő dokumentumoknak van '''age''' mezője, erre akarjuk végrehajtani az '''avg''' függvényt.
<pre>
curl -XPOST "http://192.168.123.71:9200/bank/_search?size=0&pretty" -H 'Content-Type: application/json' -d'
{
"aggs" : {
"avg_age" : { "avg" : { "field" : "age" } }
}
}
'
</pre>
Nézzük meg a végeredményt. Az elején van a szokásos statisztika, láthatjuk, hogy mind az 1000 dokumentumot figyelembe vette, majd jönnek az aggregációs eredmények az '''aggregations''' listában.
<pre>
{
"took" : 6,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1000,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"avg_age" : {
"value" : 30.171
}
}
}
</pre>
Egy szem eredmény van benne, az '''avg_age''', aminek az értéke 30.171, vagyis az átlagéletkora az ügyfeleknek 30.171 év.
<br>