search_aggs.go 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450
  1. // Copyright 2012-present Oliver Eilhard. All rights reserved.
  2. // Use of this source code is governed by a MIT-license.
  3. // See http://olivere.mit-license.org/license.txt for details.
  4. package elastic
  5. import (
  6. "bytes"
  7. "encoding/json"
  8. )
  9. // Aggregations can be seen as a unit-of-work that build
  10. // analytic information over a set of documents. It is
  11. // (in many senses) the follow-up of facets in Elasticsearch.
  12. // For more details about aggregations, visit:
  13. // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations.html
  14. type Aggregation interface {
  15. // Source returns a JSON-serializable aggregation that is a fragment
  16. // of the request sent to Elasticsearch.
  17. Source() (interface{}, error)
  18. }
  19. // Aggregations is a list of aggregations that are part of a search result.
  20. type Aggregations map[string]*json.RawMessage
  21. // Min returns min aggregation results.
  22. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-min-aggregation.html
  23. func (a Aggregations) Min(name string) (*AggregationValueMetric, bool) {
  24. if raw, found := a[name]; found {
  25. agg := new(AggregationValueMetric)
  26. if raw == nil {
  27. return agg, true
  28. }
  29. if err := json.Unmarshal(*raw, agg); err == nil {
  30. return agg, true
  31. }
  32. }
  33. return nil, false
  34. }
  35. // Max returns max aggregation results.
  36. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-max-aggregation.html
  37. func (a Aggregations) Max(name string) (*AggregationValueMetric, bool) {
  38. if raw, found := a[name]; found {
  39. agg := new(AggregationValueMetric)
  40. if raw == nil {
  41. return agg, true
  42. }
  43. if err := json.Unmarshal(*raw, agg); err == nil {
  44. return agg, true
  45. }
  46. }
  47. return nil, false
  48. }
  49. // Sum returns sum aggregation results.
  50. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-sum-aggregation.html
  51. func (a Aggregations) Sum(name string) (*AggregationValueMetric, bool) {
  52. if raw, found := a[name]; found {
  53. agg := new(AggregationValueMetric)
  54. if raw == nil {
  55. return agg, true
  56. }
  57. if err := json.Unmarshal(*raw, agg); err == nil {
  58. return agg, true
  59. }
  60. }
  61. return nil, false
  62. }
  63. // Avg returns average aggregation results.
  64. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-avg-aggregation.html
  65. func (a Aggregations) Avg(name string) (*AggregationValueMetric, bool) {
  66. if raw, found := a[name]; found {
  67. agg := new(AggregationValueMetric)
  68. if raw == nil {
  69. return agg, true
  70. }
  71. if err := json.Unmarshal(*raw, agg); err == nil {
  72. return agg, true
  73. }
  74. }
  75. return nil, false
  76. }
  77. // ValueCount returns value-count aggregation results.
  78. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-valuecount-aggregation.html
  79. func (a Aggregations) ValueCount(name string) (*AggregationValueMetric, bool) {
  80. if raw, found := a[name]; found {
  81. agg := new(AggregationValueMetric)
  82. if raw == nil {
  83. return agg, true
  84. }
  85. if err := json.Unmarshal(*raw, agg); err == nil {
  86. return agg, true
  87. }
  88. }
  89. return nil, false
  90. }
  91. // Cardinality returns cardinality aggregation results.
  92. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-cardinality-aggregation.html
  93. func (a Aggregations) Cardinality(name string) (*AggregationValueMetric, bool) {
  94. if raw, found := a[name]; found {
  95. agg := new(AggregationValueMetric)
  96. if raw == nil {
  97. return agg, true
  98. }
  99. if err := json.Unmarshal(*raw, agg); err == nil {
  100. return agg, true
  101. }
  102. }
  103. return nil, false
  104. }
  105. // Stats returns stats aggregation results.
  106. // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-stats-aggregation.html
  107. func (a Aggregations) Stats(name string) (*AggregationStatsMetric, bool) {
  108. if raw, found := a[name]; found {
  109. agg := new(AggregationStatsMetric)
  110. if raw == nil {
  111. return agg, true
  112. }
  113. if err := json.Unmarshal(*raw, agg); err == nil {
  114. return agg, true
  115. }
  116. }
  117. return nil, false
  118. }
  119. // ExtendedStats returns extended stats aggregation results.
  120. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-extendedstats-aggregation.html
  121. func (a Aggregations) ExtendedStats(name string) (*AggregationExtendedStatsMetric, bool) {
  122. if raw, found := a[name]; found {
  123. agg := new(AggregationExtendedStatsMetric)
  124. if raw == nil {
  125. return agg, true
  126. }
  127. if err := json.Unmarshal(*raw, agg); err == nil {
  128. return agg, true
  129. }
  130. }
  131. return nil, false
  132. }
  133. // MatrixStats returns matrix stats aggregation results.
  134. // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-matrix-stats-aggregation.html
  135. func (a Aggregations) MatrixStats(name string) (*AggregationMatrixStats, bool) {
  136. if raw, found := a[name]; found {
  137. agg := new(AggregationMatrixStats)
  138. if raw == nil {
  139. return agg, true
  140. }
  141. if err := json.Unmarshal(*raw, agg); err == nil {
  142. return agg, true
  143. }
  144. }
  145. return nil, false
  146. }
  147. // Percentiles returns percentiles results.
  148. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-aggregation.html
  149. func (a Aggregations) Percentiles(name string) (*AggregationPercentilesMetric, bool) {
  150. if raw, found := a[name]; found {
  151. agg := new(AggregationPercentilesMetric)
  152. if raw == nil {
  153. return agg, true
  154. }
  155. if err := json.Unmarshal(*raw, agg); err == nil {
  156. return agg, true
  157. }
  158. }
  159. return nil, false
  160. }
  161. // PercentileRanks returns percentile ranks results.
  162. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-percentile-rank-aggregation.html
  163. func (a Aggregations) PercentileRanks(name string) (*AggregationPercentilesMetric, bool) {
  164. if raw, found := a[name]; found {
  165. agg := new(AggregationPercentilesMetric)
  166. if raw == nil {
  167. return agg, true
  168. }
  169. if err := json.Unmarshal(*raw, agg); err == nil {
  170. return agg, true
  171. }
  172. }
  173. return nil, false
  174. }
  175. // TopHits returns top-hits aggregation results.
  176. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-top-hits-aggregation.html
  177. func (a Aggregations) TopHits(name string) (*AggregationTopHitsMetric, bool) {
  178. if raw, found := a[name]; found {
  179. agg := new(AggregationTopHitsMetric)
  180. if raw == nil {
  181. return agg, true
  182. }
  183. if err := json.Unmarshal(*raw, agg); err == nil {
  184. return agg, true
  185. }
  186. }
  187. return nil, false
  188. }
  189. // Global returns global results.
  190. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-global-aggregation.html
  191. func (a Aggregations) Global(name string) (*AggregationSingleBucket, bool) {
  192. if raw, found := a[name]; found {
  193. agg := new(AggregationSingleBucket)
  194. if raw == nil {
  195. return agg, true
  196. }
  197. if err := json.Unmarshal(*raw, agg); err == nil {
  198. return agg, true
  199. }
  200. }
  201. return nil, false
  202. }
  203. // Filter returns filter results.
  204. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filter-aggregation.html
  205. func (a Aggregations) Filter(name string) (*AggregationSingleBucket, bool) {
  206. if raw, found := a[name]; found {
  207. agg := new(AggregationSingleBucket)
  208. if raw == nil {
  209. return agg, true
  210. }
  211. if err := json.Unmarshal(*raw, agg); err == nil {
  212. return agg, true
  213. }
  214. }
  215. return nil, false
  216. }
  217. // Filters returns filters results.
  218. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-filters-aggregation.html
  219. func (a Aggregations) Filters(name string) (*AggregationBucketFilters, bool) {
  220. if raw, found := a[name]; found {
  221. agg := new(AggregationBucketFilters)
  222. if raw == nil {
  223. return agg, true
  224. }
  225. if err := json.Unmarshal(*raw, agg); err == nil {
  226. return agg, true
  227. }
  228. }
  229. return nil, false
  230. }
  231. // Missing returns missing results.
  232. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-missing-aggregation.html
  233. func (a Aggregations) Missing(name string) (*AggregationSingleBucket, bool) {
  234. if raw, found := a[name]; found {
  235. agg := new(AggregationSingleBucket)
  236. if raw == nil {
  237. return agg, true
  238. }
  239. if err := json.Unmarshal(*raw, agg); err == nil {
  240. return agg, true
  241. }
  242. }
  243. return nil, false
  244. }
  245. // Nested returns nested results.
  246. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-nested-aggregation.html
  247. func (a Aggregations) Nested(name string) (*AggregationSingleBucket, bool) {
  248. if raw, found := a[name]; found {
  249. agg := new(AggregationSingleBucket)
  250. if raw == nil {
  251. return agg, true
  252. }
  253. if err := json.Unmarshal(*raw, agg); err == nil {
  254. return agg, true
  255. }
  256. }
  257. return nil, false
  258. }
  259. // ReverseNested returns reverse-nested results.
  260. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-reverse-nested-aggregation.html
  261. func (a Aggregations) ReverseNested(name string) (*AggregationSingleBucket, bool) {
  262. if raw, found := a[name]; found {
  263. agg := new(AggregationSingleBucket)
  264. if raw == nil {
  265. return agg, true
  266. }
  267. if err := json.Unmarshal(*raw, agg); err == nil {
  268. return agg, true
  269. }
  270. }
  271. return nil, false
  272. }
  273. // Children returns children results.
  274. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-children-aggregation.html
  275. func (a Aggregations) Children(name string) (*AggregationSingleBucket, bool) {
  276. if raw, found := a[name]; found {
  277. agg := new(AggregationSingleBucket)
  278. if raw == nil {
  279. return agg, true
  280. }
  281. if err := json.Unmarshal(*raw, agg); err == nil {
  282. return agg, true
  283. }
  284. }
  285. return nil, false
  286. }
  287. // Terms returns terms aggregation results.
  288. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-terms-aggregation.html
  289. func (a Aggregations) Terms(name string) (*AggregationBucketKeyItems, bool) {
  290. if raw, found := a[name]; found {
  291. agg := new(AggregationBucketKeyItems)
  292. if raw == nil {
  293. return agg, true
  294. }
  295. if err := json.Unmarshal(*raw, agg); err == nil {
  296. return agg, true
  297. }
  298. }
  299. return nil, false
  300. }
  301. // SignificantTerms returns significant terms aggregation results.
  302. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-significantterms-aggregation.html
  303. func (a Aggregations) SignificantTerms(name string) (*AggregationBucketSignificantTerms, bool) {
  304. if raw, found := a[name]; found {
  305. agg := new(AggregationBucketSignificantTerms)
  306. if raw == nil {
  307. return agg, true
  308. }
  309. if err := json.Unmarshal(*raw, agg); err == nil {
  310. return agg, true
  311. }
  312. }
  313. return nil, false
  314. }
  315. // Sampler returns sampler aggregation results.
  316. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-sampler-aggregation.html
  317. func (a Aggregations) Sampler(name string) (*AggregationSingleBucket, bool) {
  318. if raw, found := a[name]; found {
  319. agg := new(AggregationSingleBucket)
  320. if raw == nil {
  321. return agg, true
  322. }
  323. if err := json.Unmarshal(*raw, agg); err == nil {
  324. return agg, true
  325. }
  326. }
  327. return nil, false
  328. }
  329. // Range returns range aggregation results.
  330. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-range-aggregation.html
  331. func (a Aggregations) Range(name string) (*AggregationBucketRangeItems, bool) {
  332. if raw, found := a[name]; found {
  333. agg := new(AggregationBucketRangeItems)
  334. if raw == nil {
  335. return agg, true
  336. }
  337. if err := json.Unmarshal(*raw, agg); err == nil {
  338. return agg, true
  339. }
  340. }
  341. return nil, false
  342. }
  343. // KeyedRange returns keyed range aggregation results.
  344. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-range-aggregation.html.
  345. func (a Aggregations) KeyedRange(name string) (*AggregationBucketKeyedRangeItems, bool) {
  346. if raw, found := a[name]; found {
  347. agg := new(AggregationBucketKeyedRangeItems)
  348. if raw == nil {
  349. return agg, true
  350. }
  351. if err := json.Unmarshal(*raw, agg); err == nil {
  352. return agg, true
  353. }
  354. }
  355. return nil, false
  356. }
  357. // DateRange returns date range aggregation results.
  358. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-daterange-aggregation.html
  359. func (a Aggregations) DateRange(name string) (*AggregationBucketRangeItems, bool) {
  360. if raw, found := a[name]; found {
  361. agg := new(AggregationBucketRangeItems)
  362. if raw == nil {
  363. return agg, true
  364. }
  365. if err := json.Unmarshal(*raw, agg); err == nil {
  366. return agg, true
  367. }
  368. }
  369. return nil, false
  370. }
  371. // IPv4Range returns IPv4 range aggregation results.
  372. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-iprange-aggregation.html
  373. func (a Aggregations) IPv4Range(name string) (*AggregationBucketRangeItems, bool) {
  374. if raw, found := a[name]; found {
  375. agg := new(AggregationBucketRangeItems)
  376. if raw == nil {
  377. return agg, true
  378. }
  379. if err := json.Unmarshal(*raw, agg); err == nil {
  380. return agg, true
  381. }
  382. }
  383. return nil, false
  384. }
  385. // Histogram returns histogram aggregation results.
  386. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-histogram-aggregation.html
  387. func (a Aggregations) Histogram(name string) (*AggregationBucketHistogramItems, bool) {
  388. if raw, found := a[name]; found {
  389. agg := new(AggregationBucketHistogramItems)
  390. if raw == nil {
  391. return agg, true
  392. }
  393. if err := json.Unmarshal(*raw, agg); err == nil {
  394. return agg, true
  395. }
  396. }
  397. return nil, false
  398. }
  399. // DateHistogram returns date histogram aggregation results.
  400. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-datehistogram-aggregation.html
  401. func (a Aggregations) DateHistogram(name string) (*AggregationBucketHistogramItems, bool) {
  402. if raw, found := a[name]; found {
  403. agg := new(AggregationBucketHistogramItems)
  404. if raw == nil {
  405. return agg, true
  406. }
  407. if err := json.Unmarshal(*raw, agg); err == nil {
  408. return agg, true
  409. }
  410. }
  411. return nil, false
  412. }
  413. // GeoBounds returns geo-bounds aggregation results.
  414. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-metrics-geobounds-aggregation.html
  415. func (a Aggregations) GeoBounds(name string) (*AggregationGeoBoundsMetric, bool) {
  416. if raw, found := a[name]; found {
  417. agg := new(AggregationGeoBoundsMetric)
  418. if raw == nil {
  419. return agg, true
  420. }
  421. if err := json.Unmarshal(*raw, agg); err == nil {
  422. return agg, true
  423. }
  424. }
  425. return nil, false
  426. }
  427. // GeoHash returns geo-hash aggregation results.
  428. // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-geohashgrid-aggregation.html
  429. func (a Aggregations) GeoHash(name string) (*AggregationBucketKeyItems, bool) {
  430. if raw, found := a[name]; found {
  431. agg := new(AggregationBucketKeyItems)
  432. if raw == nil {
  433. return agg, true
  434. }
  435. if err := json.Unmarshal(*raw, agg); err == nil {
  436. return agg, true
  437. }
  438. }
  439. return nil, false
  440. }
  441. // GeoDistance returns geo distance aggregation results.
  442. // See: https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-bucket-geodistance-aggregation.html
  443. func (a Aggregations) GeoDistance(name string) (*AggregationBucketRangeItems, bool) {
  444. if raw, found := a[name]; found {
  445. agg := new(AggregationBucketRangeItems)
  446. if raw == nil {
  447. return agg, true
  448. }
  449. if err := json.Unmarshal(*raw, agg); err == nil {
  450. return agg, true
  451. }
  452. }
  453. return nil, false
  454. }
  455. // AvgBucket returns average bucket pipeline aggregation results.
  456. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-avg-bucket-aggregation.html
  457. func (a Aggregations) AvgBucket(name string) (*AggregationPipelineSimpleValue, bool) {
  458. if raw, found := a[name]; found {
  459. agg := new(AggregationPipelineSimpleValue)
  460. if raw == nil {
  461. return agg, true
  462. }
  463. if err := json.Unmarshal(*raw, agg); err == nil {
  464. return agg, true
  465. }
  466. }
  467. return nil, false
  468. }
  469. // SumBucket returns sum bucket pipeline aggregation results.
  470. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-sum-bucket-aggregation.html
  471. func (a Aggregations) SumBucket(name string) (*AggregationPipelineSimpleValue, bool) {
  472. if raw, found := a[name]; found {
  473. agg := new(AggregationPipelineSimpleValue)
  474. if raw == nil {
  475. return agg, true
  476. }
  477. if err := json.Unmarshal(*raw, agg); err == nil {
  478. return agg, true
  479. }
  480. }
  481. return nil, false
  482. }
  483. // StatsBucket returns stats bucket pipeline aggregation results.
  484. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-stats-bucket-aggregation.html
  485. func (a Aggregations) StatsBucket(name string) (*AggregationPipelineStatsMetric, bool) {
  486. if raw, found := a[name]; found {
  487. agg := new(AggregationPipelineStatsMetric)
  488. if raw == nil {
  489. return agg, true
  490. }
  491. if err := json.Unmarshal(*raw, agg); err == nil {
  492. return agg, true
  493. }
  494. }
  495. return nil, false
  496. }
  497. // PercentilesBucket returns stats bucket pipeline aggregation results.
  498. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-percentiles-bucket-aggregation.html
  499. func (a Aggregations) PercentilesBucket(name string) (*AggregationPipelinePercentilesMetric, bool) {
  500. if raw, found := a[name]; found {
  501. agg := new(AggregationPipelinePercentilesMetric)
  502. if raw == nil {
  503. return agg, true
  504. }
  505. if err := json.Unmarshal(*raw, agg); err == nil {
  506. return agg, true
  507. }
  508. }
  509. return nil, false
  510. }
  511. // MaxBucket returns maximum bucket pipeline aggregation results.
  512. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-max-bucket-aggregation.html
  513. func (a Aggregations) MaxBucket(name string) (*AggregationPipelineBucketMetricValue, bool) {
  514. if raw, found := a[name]; found {
  515. agg := new(AggregationPipelineBucketMetricValue)
  516. if raw == nil {
  517. return agg, true
  518. }
  519. if err := json.Unmarshal(*raw, agg); err == nil {
  520. return agg, true
  521. }
  522. }
  523. return nil, false
  524. }
  525. // MinBucket returns minimum bucket pipeline aggregation results.
  526. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-min-bucket-aggregation.html
  527. func (a Aggregations) MinBucket(name string) (*AggregationPipelineBucketMetricValue, bool) {
  528. if raw, found := a[name]; found {
  529. agg := new(AggregationPipelineBucketMetricValue)
  530. if raw == nil {
  531. return agg, true
  532. }
  533. if err := json.Unmarshal(*raw, agg); err == nil {
  534. return agg, true
  535. }
  536. }
  537. return nil, false
  538. }
  539. // MovAvg returns moving average pipeline aggregation results.
  540. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-movavg-aggregation.html
  541. func (a Aggregations) MovAvg(name string) (*AggregationPipelineSimpleValue, bool) {
  542. if raw, found := a[name]; found {
  543. agg := new(AggregationPipelineSimpleValue)
  544. if raw == nil {
  545. return agg, true
  546. }
  547. if err := json.Unmarshal(*raw, agg); err == nil {
  548. return agg, true
  549. }
  550. }
  551. return nil, false
  552. }
  553. // Derivative returns derivative pipeline aggregation results.
  554. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-derivative-aggregation.html
  555. func (a Aggregations) Derivative(name string) (*AggregationPipelineDerivative, bool) {
  556. if raw, found := a[name]; found {
  557. agg := new(AggregationPipelineDerivative)
  558. if raw == nil {
  559. return agg, true
  560. }
  561. if err := json.Unmarshal(*raw, agg); err == nil {
  562. return agg, true
  563. }
  564. }
  565. return nil, false
  566. }
  567. // CumulativeSum returns a cumulative sum pipeline aggregation results.
  568. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-cumulative-sum-aggregation.html
  569. func (a Aggregations) CumulativeSum(name string) (*AggregationPipelineSimpleValue, bool) {
  570. if raw, found := a[name]; found {
  571. agg := new(AggregationPipelineSimpleValue)
  572. if raw == nil {
  573. return agg, true
  574. }
  575. if err := json.Unmarshal(*raw, agg); err == nil {
  576. return agg, true
  577. }
  578. }
  579. return nil, false
  580. }
  581. // BucketScript returns bucket script pipeline aggregation results.
  582. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-bucket-script-aggregation.html
  583. func (a Aggregations) BucketScript(name string) (*AggregationPipelineSimpleValue, bool) {
  584. if raw, found := a[name]; found {
  585. agg := new(AggregationPipelineSimpleValue)
  586. if raw == nil {
  587. return agg, true
  588. }
  589. if err := json.Unmarshal(*raw, agg); err == nil {
  590. return agg, true
  591. }
  592. }
  593. return nil, false
  594. }
  595. // SerialDiff returns serial differencing pipeline aggregation results.
  596. // See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-aggregations-pipeline-serialdiff-aggregation.html
  597. func (a Aggregations) SerialDiff(name string) (*AggregationPipelineSimpleValue, bool) {
  598. if raw, found := a[name]; found {
  599. agg := new(AggregationPipelineSimpleValue)
  600. if raw == nil {
  601. return agg, true
  602. }
  603. if err := json.Unmarshal(*raw, agg); err == nil {
  604. return agg, true
  605. }
  606. }
  607. return nil, false
  608. }
  609. // -- Single value metric --
  610. // AggregationValueMetric is a single-value metric, returned e.g. by a
  611. // Min or Max aggregation.
  612. type AggregationValueMetric struct {
  613. Aggregations
  614. Value *float64 //`json:"value"`
  615. Meta map[string]interface{} // `json:"meta,omitempty"`
  616. }
  617. // UnmarshalJSON decodes JSON data and initializes an AggregationValueMetric structure.
  618. func (a *AggregationValueMetric) UnmarshalJSON(data []byte) error {
  619. var aggs map[string]*json.RawMessage
  620. if err := json.Unmarshal(data, &aggs); err != nil {
  621. return err
  622. }
  623. if v, ok := aggs["value"]; ok && v != nil {
  624. json.Unmarshal(*v, &a.Value)
  625. }
  626. if v, ok := aggs["meta"]; ok && v != nil {
  627. json.Unmarshal(*v, &a.Meta)
  628. }
  629. a.Aggregations = aggs
  630. return nil
  631. }
  632. // -- Stats metric --
  633. // AggregationStatsMetric is a multi-value metric, returned by a Stats aggregation.
  634. type AggregationStatsMetric struct {
  635. Aggregations
  636. Count int64 // `json:"count"`
  637. Min *float64 //`json:"min,omitempty"`
  638. Max *float64 //`json:"max,omitempty"`
  639. Avg *float64 //`json:"avg,omitempty"`
  640. Sum *float64 //`json:"sum,omitempty"`
  641. Meta map[string]interface{} // `json:"meta,omitempty"`
  642. }
  643. // UnmarshalJSON decodes JSON data and initializes an AggregationStatsMetric structure.
  644. func (a *AggregationStatsMetric) UnmarshalJSON(data []byte) error {
  645. var aggs map[string]*json.RawMessage
  646. if err := json.Unmarshal(data, &aggs); err != nil {
  647. return err
  648. }
  649. if v, ok := aggs["count"]; ok && v != nil {
  650. json.Unmarshal(*v, &a.Count)
  651. }
  652. if v, ok := aggs["min"]; ok && v != nil {
  653. json.Unmarshal(*v, &a.Min)
  654. }
  655. if v, ok := aggs["max"]; ok && v != nil {
  656. json.Unmarshal(*v, &a.Max)
  657. }
  658. if v, ok := aggs["avg"]; ok && v != nil {
  659. json.Unmarshal(*v, &a.Avg)
  660. }
  661. if v, ok := aggs["sum"]; ok && v != nil {
  662. json.Unmarshal(*v, &a.Sum)
  663. }
  664. if v, ok := aggs["meta"]; ok && v != nil {
  665. json.Unmarshal(*v, &a.Meta)
  666. }
  667. a.Aggregations = aggs
  668. return nil
  669. }
  670. // -- Extended stats metric --
  671. // AggregationExtendedStatsMetric is a multi-value metric, returned by an ExtendedStats aggregation.
  672. type AggregationExtendedStatsMetric struct {
  673. Aggregations
  674. Count int64 // `json:"count"`
  675. Min *float64 //`json:"min,omitempty"`
  676. Max *float64 //`json:"max,omitempty"`
  677. Avg *float64 //`json:"avg,omitempty"`
  678. Sum *float64 //`json:"sum,omitempty"`
  679. SumOfSquares *float64 //`json:"sum_of_squares,omitempty"`
  680. Variance *float64 //`json:"variance,omitempty"`
  681. StdDeviation *float64 //`json:"std_deviation,omitempty"`
  682. Meta map[string]interface{} // `json:"meta,omitempty"`
  683. }
  684. // UnmarshalJSON decodes JSON data and initializes an AggregationExtendedStatsMetric structure.
  685. func (a *AggregationExtendedStatsMetric) UnmarshalJSON(data []byte) error {
  686. var aggs map[string]*json.RawMessage
  687. if err := json.Unmarshal(data, &aggs); err != nil {
  688. return err
  689. }
  690. if v, ok := aggs["count"]; ok && v != nil {
  691. json.Unmarshal(*v, &a.Count)
  692. }
  693. if v, ok := aggs["min"]; ok && v != nil {
  694. json.Unmarshal(*v, &a.Min)
  695. }
  696. if v, ok := aggs["max"]; ok && v != nil {
  697. json.Unmarshal(*v, &a.Max)
  698. }
  699. if v, ok := aggs["avg"]; ok && v != nil {
  700. json.Unmarshal(*v, &a.Avg)
  701. }
  702. if v, ok := aggs["sum"]; ok && v != nil {
  703. json.Unmarshal(*v, &a.Sum)
  704. }
  705. if v, ok := aggs["sum_of_squares"]; ok && v != nil {
  706. json.Unmarshal(*v, &a.SumOfSquares)
  707. }
  708. if v, ok := aggs["variance"]; ok && v != nil {
  709. json.Unmarshal(*v, &a.Variance)
  710. }
  711. if v, ok := aggs["std_deviation"]; ok && v != nil {
  712. json.Unmarshal(*v, &a.StdDeviation)
  713. }
  714. if v, ok := aggs["meta"]; ok && v != nil {
  715. json.Unmarshal(*v, &a.Meta)
  716. }
  717. a.Aggregations = aggs
  718. return nil
  719. }
  720. // -- Matrix Stats --
  721. // AggregationMatrixStats is returned by a MatrixStats aggregation.
  722. type AggregationMatrixStats struct {
  723. Aggregations
  724. Fields []*AggregationMatrixStatsField // `json:"field,omitempty"`
  725. Meta map[string]interface{} // `json:"meta,omitempty"`
  726. }
  727. // AggregationMatrixStatsField represents running stats of a single field
  728. // returned from MatrixStats aggregation.
  729. type AggregationMatrixStatsField struct {
  730. Name string `json:"name"`
  731. Count int64 `json:"count"`
  732. Mean float64 `json:"mean,omitempty"`
  733. Variance float64 `json:"variance,omitempty"`
  734. Skewness float64 `json:"skewness,omitempty"`
  735. Kurtosis float64 `json:"kurtosis,omitempty"`
  736. Covariance map[string]float64 `json:"covariance,omitempty"`
  737. Correlation map[string]float64 `json:"correlation,omitempty"`
  738. }
  739. // UnmarshalJSON decodes JSON data and initializes an AggregationMatrixStats structure.
  740. func (a *AggregationMatrixStats) UnmarshalJSON(data []byte) error {
  741. var aggs map[string]*json.RawMessage
  742. if err := json.Unmarshal(data, &aggs); err != nil {
  743. return err
  744. }
  745. if v, ok := aggs["fields"]; ok && v != nil {
  746. // RunningStats for every field
  747. json.Unmarshal(*v, &a.Fields)
  748. }
  749. if v, ok := aggs["meta"]; ok && v != nil {
  750. json.Unmarshal(*v, &a.Meta)
  751. }
  752. a.Aggregations = aggs
  753. return nil
  754. }
  755. // -- Percentiles metric --
  756. // AggregationPercentilesMetric is a multi-value metric, returned by a Percentiles aggregation.
  757. type AggregationPercentilesMetric struct {
  758. Aggregations
  759. Values map[string]float64 // `json:"values"`
  760. Meta map[string]interface{} // `json:"meta,omitempty"`
  761. }
  762. // UnmarshalJSON decodes JSON data and initializes an AggregationPercentilesMetric structure.
  763. func (a *AggregationPercentilesMetric) UnmarshalJSON(data []byte) error {
  764. var aggs map[string]*json.RawMessage
  765. if err := json.Unmarshal(data, &aggs); err != nil {
  766. return err
  767. }
  768. if v, ok := aggs["values"]; ok && v != nil {
  769. json.Unmarshal(*v, &a.Values)
  770. }
  771. if v, ok := aggs["meta"]; ok && v != nil {
  772. json.Unmarshal(*v, &a.Meta)
  773. }
  774. a.Aggregations = aggs
  775. return nil
  776. }
  777. // -- Top-hits metric --
  778. // AggregationTopHitsMetric is a metric returned by a TopHits aggregation.
  779. type AggregationTopHitsMetric struct {
  780. Aggregations
  781. Hits *SearchHits //`json:"hits"`
  782. Meta map[string]interface{} // `json:"meta,omitempty"`
  783. }
  784. // UnmarshalJSON decodes JSON data and initializes an AggregationTopHitsMetric structure.
  785. func (a *AggregationTopHitsMetric) UnmarshalJSON(data []byte) error {
  786. var aggs map[string]*json.RawMessage
  787. if err := json.Unmarshal(data, &aggs); err != nil {
  788. return err
  789. }
  790. a.Aggregations = aggs
  791. a.Hits = new(SearchHits)
  792. if v, ok := aggs["hits"]; ok && v != nil {
  793. json.Unmarshal(*v, &a.Hits)
  794. }
  795. if v, ok := aggs["meta"]; ok && v != nil {
  796. json.Unmarshal(*v, &a.Meta)
  797. }
  798. return nil
  799. }
  800. // -- Geo-bounds metric --
  801. // AggregationGeoBoundsMetric is a metric as returned by a GeoBounds aggregation.
  802. type AggregationGeoBoundsMetric struct {
  803. Aggregations
  804. Bounds struct {
  805. TopLeft struct {
  806. Latitude float64 `json:"lat"`
  807. Longitude float64 `json:"lon"`
  808. } `json:"top_left"`
  809. BottomRight struct {
  810. Latitude float64 `json:"lat"`
  811. Longitude float64 `json:"lon"`
  812. } `json:"bottom_right"`
  813. } `json:"bounds"`
  814. Meta map[string]interface{} // `json:"meta,omitempty"`
  815. }
  816. // UnmarshalJSON decodes JSON data and initializes an AggregationGeoBoundsMetric structure.
  817. func (a *AggregationGeoBoundsMetric) UnmarshalJSON(data []byte) error {
  818. var aggs map[string]*json.RawMessage
  819. if err := json.Unmarshal(data, &aggs); err != nil {
  820. return err
  821. }
  822. if v, ok := aggs["bounds"]; ok && v != nil {
  823. json.Unmarshal(*v, &a.Bounds)
  824. }
  825. if v, ok := aggs["meta"]; ok && v != nil {
  826. json.Unmarshal(*v, &a.Meta)
  827. }
  828. a.Aggregations = aggs
  829. return nil
  830. }
  831. // -- Single bucket --
  832. // AggregationSingleBucket is a single bucket, returned e.g. via an aggregation of type Global.
  833. type AggregationSingleBucket struct {
  834. Aggregations
  835. DocCount int64 // `json:"doc_count"`
  836. Meta map[string]interface{} // `json:"meta,omitempty"`
  837. }
  838. // UnmarshalJSON decodes JSON data and initializes an AggregationSingleBucket structure.
  839. func (a *AggregationSingleBucket) UnmarshalJSON(data []byte) error {
  840. var aggs map[string]*json.RawMessage
  841. if err := json.Unmarshal(data, &aggs); err != nil {
  842. return err
  843. }
  844. if v, ok := aggs["doc_count"]; ok && v != nil {
  845. json.Unmarshal(*v, &a.DocCount)
  846. }
  847. if v, ok := aggs["meta"]; ok && v != nil {
  848. json.Unmarshal(*v, &a.Meta)
  849. }
  850. a.Aggregations = aggs
  851. return nil
  852. }
  853. // -- Bucket range items --
  854. // AggregationBucketRangeItems is a bucket aggregation that is e.g. returned
  855. // with a range aggregation.
  856. type AggregationBucketRangeItems struct {
  857. Aggregations
  858. DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"`
  859. SumOfOtherDocCount int64 //`json:"sum_other_doc_count"`
  860. Buckets []*AggregationBucketRangeItem //`json:"buckets"`
  861. Meta map[string]interface{} // `json:"meta,omitempty"`
  862. }
  863. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure.
  864. func (a *AggregationBucketRangeItems) UnmarshalJSON(data []byte) error {
  865. var aggs map[string]*json.RawMessage
  866. if err := json.Unmarshal(data, &aggs); err != nil {
  867. return err
  868. }
  869. if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil {
  870. json.Unmarshal(*v, &a.DocCountErrorUpperBound)
  871. }
  872. if v, ok := aggs["sum_other_doc_count"]; ok && v != nil {
  873. json.Unmarshal(*v, &a.SumOfOtherDocCount)
  874. }
  875. if v, ok := aggs["buckets"]; ok && v != nil {
  876. json.Unmarshal(*v, &a.Buckets)
  877. }
  878. if v, ok := aggs["meta"]; ok && v != nil {
  879. json.Unmarshal(*v, &a.Meta)
  880. }
  881. a.Aggregations = aggs
  882. return nil
  883. }
  884. // AggregationBucketKeyedRangeItems is a bucket aggregation that is e.g. returned
  885. // with a keyed range aggregation.
  886. type AggregationBucketKeyedRangeItems struct {
  887. Aggregations
  888. DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"`
  889. SumOfOtherDocCount int64 //`json:"sum_other_doc_count"`
  890. Buckets map[string]*AggregationBucketRangeItem //`json:"buckets"`
  891. Meta map[string]interface{} // `json:"meta,omitempty"`
  892. }
  893. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItems structure.
  894. func (a *AggregationBucketKeyedRangeItems) UnmarshalJSON(data []byte) error {
  895. var aggs map[string]*json.RawMessage
  896. if err := json.Unmarshal(data, &aggs); err != nil {
  897. return err
  898. }
  899. if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil {
  900. json.Unmarshal(*v, &a.DocCountErrorUpperBound)
  901. }
  902. if v, ok := aggs["sum_other_doc_count"]; ok && v != nil {
  903. json.Unmarshal(*v, &a.SumOfOtherDocCount)
  904. }
  905. if v, ok := aggs["buckets"]; ok && v != nil {
  906. json.Unmarshal(*v, &a.Buckets)
  907. }
  908. if v, ok := aggs["meta"]; ok && v != nil {
  909. json.Unmarshal(*v, &a.Meta)
  910. }
  911. a.Aggregations = aggs
  912. return nil
  913. }
  914. // AggregationBucketRangeItem is a single bucket of an AggregationBucketRangeItems structure.
  915. type AggregationBucketRangeItem struct {
  916. Aggregations
  917. Key string //`json:"key"`
  918. DocCount int64 //`json:"doc_count"`
  919. From *float64 //`json:"from"`
  920. FromAsString string //`json:"from_as_string"`
  921. To *float64 //`json:"to"`
  922. ToAsString string //`json:"to_as_string"`
  923. }
  924. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketRangeItem structure.
  925. func (a *AggregationBucketRangeItem) UnmarshalJSON(data []byte) error {
  926. var aggs map[string]*json.RawMessage
  927. if err := json.Unmarshal(data, &aggs); err != nil {
  928. return err
  929. }
  930. if v, ok := aggs["key"]; ok && v != nil {
  931. json.Unmarshal(*v, &a.Key)
  932. }
  933. if v, ok := aggs["doc_count"]; ok && v != nil {
  934. json.Unmarshal(*v, &a.DocCount)
  935. }
  936. if v, ok := aggs["from"]; ok && v != nil {
  937. json.Unmarshal(*v, &a.From)
  938. }
  939. if v, ok := aggs["from_as_string"]; ok && v != nil {
  940. json.Unmarshal(*v, &a.FromAsString)
  941. }
  942. if v, ok := aggs["to"]; ok && v != nil {
  943. json.Unmarshal(*v, &a.To)
  944. }
  945. if v, ok := aggs["to_as_string"]; ok && v != nil {
  946. json.Unmarshal(*v, &a.ToAsString)
  947. }
  948. a.Aggregations = aggs
  949. return nil
  950. }
  951. // -- Bucket key items --
  952. // AggregationBucketKeyItems is a bucket aggregation that is e.g. returned
  953. // with a terms aggregation.
  954. type AggregationBucketKeyItems struct {
  955. Aggregations
  956. DocCountErrorUpperBound int64 //`json:"doc_count_error_upper_bound"`
  957. SumOfOtherDocCount int64 //`json:"sum_other_doc_count"`
  958. Buckets []*AggregationBucketKeyItem //`json:"buckets"`
  959. Meta map[string]interface{} // `json:"meta,omitempty"`
  960. }
  961. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItems structure.
  962. func (a *AggregationBucketKeyItems) UnmarshalJSON(data []byte) error {
  963. var aggs map[string]*json.RawMessage
  964. if err := json.Unmarshal(data, &aggs); err != nil {
  965. return err
  966. }
  967. if v, ok := aggs["doc_count_error_upper_bound"]; ok && v != nil {
  968. json.Unmarshal(*v, &a.DocCountErrorUpperBound)
  969. }
  970. if v, ok := aggs["sum_other_doc_count"]; ok && v != nil {
  971. json.Unmarshal(*v, &a.SumOfOtherDocCount)
  972. }
  973. if v, ok := aggs["buckets"]; ok && v != nil {
  974. json.Unmarshal(*v, &a.Buckets)
  975. }
  976. if v, ok := aggs["meta"]; ok && v != nil {
  977. json.Unmarshal(*v, &a.Meta)
  978. }
  979. a.Aggregations = aggs
  980. return nil
  981. }
  982. // AggregationBucketKeyItem is a single bucket of an AggregationBucketKeyItems structure.
  983. type AggregationBucketKeyItem struct {
  984. Aggregations
  985. Key interface{} //`json:"key"`
  986. KeyAsString *string //`json:"key_as_string"`
  987. KeyNumber json.Number
  988. DocCount int64 //`json:"doc_count"`
  989. }
  990. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketKeyItem structure.
  991. func (a *AggregationBucketKeyItem) UnmarshalJSON(data []byte) error {
  992. var aggs map[string]*json.RawMessage
  993. dec := json.NewDecoder(bytes.NewReader(data))
  994. dec.UseNumber()
  995. if err := dec.Decode(&aggs); err != nil {
  996. return err
  997. }
  998. if v, ok := aggs["key"]; ok && v != nil {
  999. json.Unmarshal(*v, &a.Key)
  1000. json.Unmarshal(*v, &a.KeyNumber)
  1001. }
  1002. if v, ok := aggs["key_as_string"]; ok && v != nil {
  1003. json.Unmarshal(*v, &a.KeyAsString)
  1004. }
  1005. if v, ok := aggs["doc_count"]; ok && v != nil {
  1006. json.Unmarshal(*v, &a.DocCount)
  1007. }
  1008. a.Aggregations = aggs
  1009. return nil
  1010. }
  1011. // -- Bucket types for significant terms --
  1012. // AggregationBucketSignificantTerms is a bucket aggregation returned
  1013. // with a significant terms aggregation.
  1014. type AggregationBucketSignificantTerms struct {
  1015. Aggregations
  1016. DocCount int64 //`json:"doc_count"`
  1017. Buckets []*AggregationBucketSignificantTerm //`json:"buckets"`
  1018. Meta map[string]interface{} // `json:"meta,omitempty"`
  1019. }
  1020. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerms structure.
  1021. func (a *AggregationBucketSignificantTerms) UnmarshalJSON(data []byte) error {
  1022. var aggs map[string]*json.RawMessage
  1023. if err := json.Unmarshal(data, &aggs); err != nil {
  1024. return err
  1025. }
  1026. if v, ok := aggs["doc_count"]; ok && v != nil {
  1027. json.Unmarshal(*v, &a.DocCount)
  1028. }
  1029. if v, ok := aggs["buckets"]; ok && v != nil {
  1030. json.Unmarshal(*v, &a.Buckets)
  1031. }
  1032. if v, ok := aggs["meta"]; ok && v != nil {
  1033. json.Unmarshal(*v, &a.Meta)
  1034. }
  1035. a.Aggregations = aggs
  1036. return nil
  1037. }
  1038. // AggregationBucketSignificantTerm is a single bucket of an AggregationBucketSignificantTerms structure.
  1039. type AggregationBucketSignificantTerm struct {
  1040. Aggregations
  1041. Key string //`json:"key"`
  1042. DocCount int64 //`json:"doc_count"`
  1043. BgCount int64 //`json:"bg_count"`
  1044. Score float64 //`json:"score"`
  1045. }
  1046. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketSignificantTerm structure.
  1047. func (a *AggregationBucketSignificantTerm) UnmarshalJSON(data []byte) error {
  1048. var aggs map[string]*json.RawMessage
  1049. if err := json.Unmarshal(data, &aggs); err != nil {
  1050. return err
  1051. }
  1052. if v, ok := aggs["key"]; ok && v != nil {
  1053. json.Unmarshal(*v, &a.Key)
  1054. }
  1055. if v, ok := aggs["doc_count"]; ok && v != nil {
  1056. json.Unmarshal(*v, &a.DocCount)
  1057. }
  1058. if v, ok := aggs["bg_count"]; ok && v != nil {
  1059. json.Unmarshal(*v, &a.BgCount)
  1060. }
  1061. if v, ok := aggs["score"]; ok && v != nil {
  1062. json.Unmarshal(*v, &a.Score)
  1063. }
  1064. a.Aggregations = aggs
  1065. return nil
  1066. }
  1067. // -- Bucket filters --
  1068. // AggregationBucketFilters is a multi-bucket aggregation that is returned
  1069. // with a filters aggregation.
  1070. type AggregationBucketFilters struct {
  1071. Aggregations
  1072. Buckets []*AggregationBucketKeyItem //`json:"buckets"`
  1073. NamedBuckets map[string]*AggregationBucketKeyItem //`json:"buckets"`
  1074. Meta map[string]interface{} // `json:"meta,omitempty"`
  1075. }
  1076. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketFilters structure.
  1077. func (a *AggregationBucketFilters) UnmarshalJSON(data []byte) error {
  1078. var aggs map[string]*json.RawMessage
  1079. if err := json.Unmarshal(data, &aggs); err != nil {
  1080. return err
  1081. }
  1082. if v, ok := aggs["buckets"]; ok && v != nil {
  1083. json.Unmarshal(*v, &a.Buckets)
  1084. json.Unmarshal(*v, &a.NamedBuckets)
  1085. }
  1086. if v, ok := aggs["meta"]; ok && v != nil {
  1087. json.Unmarshal(*v, &a.Meta)
  1088. }
  1089. a.Aggregations = aggs
  1090. return nil
  1091. }
  1092. // -- Bucket histogram items --
  1093. // AggregationBucketHistogramItems is a bucket aggregation that is returned
  1094. // with a date histogram aggregation.
  1095. type AggregationBucketHistogramItems struct {
  1096. Aggregations
  1097. Buckets []*AggregationBucketHistogramItem //`json:"buckets"`
  1098. Meta map[string]interface{} // `json:"meta,omitempty"`
  1099. }
  1100. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItems structure.
  1101. func (a *AggregationBucketHistogramItems) UnmarshalJSON(data []byte) error {
  1102. var aggs map[string]*json.RawMessage
  1103. if err := json.Unmarshal(data, &aggs); err != nil {
  1104. return err
  1105. }
  1106. if v, ok := aggs["buckets"]; ok && v != nil {
  1107. json.Unmarshal(*v, &a.Buckets)
  1108. }
  1109. if v, ok := aggs["meta"]; ok && v != nil {
  1110. json.Unmarshal(*v, &a.Meta)
  1111. }
  1112. a.Aggregations = aggs
  1113. return nil
  1114. }
  1115. // AggregationBucketHistogramItem is a single bucket of an AggregationBucketHistogramItems structure.
  1116. type AggregationBucketHistogramItem struct {
  1117. Aggregations
  1118. Key float64 //`json:"key"`
  1119. KeyAsString *string //`json:"key_as_string"`
  1120. DocCount int64 //`json:"doc_count"`
  1121. }
  1122. // UnmarshalJSON decodes JSON data and initializes an AggregationBucketHistogramItem structure.
  1123. func (a *AggregationBucketHistogramItem) UnmarshalJSON(data []byte) error {
  1124. var aggs map[string]*json.RawMessage
  1125. if err := json.Unmarshal(data, &aggs); err != nil {
  1126. return err
  1127. }
  1128. if v, ok := aggs["key"]; ok && v != nil {
  1129. json.Unmarshal(*v, &a.Key)
  1130. }
  1131. if v, ok := aggs["key_as_string"]; ok && v != nil {
  1132. json.Unmarshal(*v, &a.KeyAsString)
  1133. }
  1134. if v, ok := aggs["doc_count"]; ok && v != nil {
  1135. json.Unmarshal(*v, &a.DocCount)
  1136. }
  1137. a.Aggregations = aggs
  1138. return nil
  1139. }
  1140. // -- Pipeline simple value --
  1141. // AggregationPipelineSimpleValue is a simple value, returned e.g. by a
  1142. // MovAvg aggregation.
  1143. type AggregationPipelineSimpleValue struct {
  1144. Aggregations
  1145. Value *float64 // `json:"value"`
  1146. ValueAsString string // `json:"value_as_string"`
  1147. Meta map[string]interface{} // `json:"meta,omitempty"`
  1148. }
  1149. // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineSimpleValue structure.
  1150. func (a *AggregationPipelineSimpleValue) UnmarshalJSON(data []byte) error {
  1151. var aggs map[string]*json.RawMessage
  1152. if err := json.Unmarshal(data, &aggs); err != nil {
  1153. return err
  1154. }
  1155. if v, ok := aggs["value"]; ok && v != nil {
  1156. json.Unmarshal(*v, &a.Value)
  1157. }
  1158. if v, ok := aggs["value_as_string"]; ok && v != nil {
  1159. json.Unmarshal(*v, &a.ValueAsString)
  1160. }
  1161. if v, ok := aggs["meta"]; ok && v != nil {
  1162. json.Unmarshal(*v, &a.Meta)
  1163. }
  1164. a.Aggregations = aggs
  1165. return nil
  1166. }
  1167. // -- Pipeline simple value --
  1168. // AggregationPipelineBucketMetricValue is a value returned e.g. by a
  1169. // MaxBucket aggregation.
  1170. type AggregationPipelineBucketMetricValue struct {
  1171. Aggregations
  1172. Keys []interface{} // `json:"keys"`
  1173. Value *float64 // `json:"value"`
  1174. ValueAsString string // `json:"value_as_string"`
  1175. Meta map[string]interface{} // `json:"meta,omitempty"`
  1176. }
  1177. // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineBucketMetricValue structure.
  1178. func (a *AggregationPipelineBucketMetricValue) UnmarshalJSON(data []byte) error {
  1179. var aggs map[string]*json.RawMessage
  1180. if err := json.Unmarshal(data, &aggs); err != nil {
  1181. return err
  1182. }
  1183. if v, ok := aggs["keys"]; ok && v != nil {
  1184. json.Unmarshal(*v, &a.Keys)
  1185. }
  1186. if v, ok := aggs["value"]; ok && v != nil {
  1187. json.Unmarshal(*v, &a.Value)
  1188. }
  1189. if v, ok := aggs["value_as_string"]; ok && v != nil {
  1190. json.Unmarshal(*v, &a.ValueAsString)
  1191. }
  1192. if v, ok := aggs["meta"]; ok && v != nil {
  1193. json.Unmarshal(*v, &a.Meta)
  1194. }
  1195. a.Aggregations = aggs
  1196. return nil
  1197. }
  1198. // -- Pipeline derivative --
  1199. // AggregationPipelineDerivative is the value returned by a
  1200. // Derivative aggregation.
  1201. type AggregationPipelineDerivative struct {
  1202. Aggregations
  1203. Value *float64 // `json:"value"`
  1204. ValueAsString string // `json:"value_as_string"`
  1205. NormalizedValue *float64 // `json:"normalized_value"`
  1206. NormalizedValueAsString string // `json:"normalized_value_as_string"`
  1207. Meta map[string]interface{} // `json:"meta,omitempty"`
  1208. }
  1209. // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineDerivative structure.
  1210. func (a *AggregationPipelineDerivative) UnmarshalJSON(data []byte) error {
  1211. var aggs map[string]*json.RawMessage
  1212. if err := json.Unmarshal(data, &aggs); err != nil {
  1213. return err
  1214. }
  1215. if v, ok := aggs["value"]; ok && v != nil {
  1216. json.Unmarshal(*v, &a.Value)
  1217. }
  1218. if v, ok := aggs["value_as_string"]; ok && v != nil {
  1219. json.Unmarshal(*v, &a.ValueAsString)
  1220. }
  1221. if v, ok := aggs["normalized_value"]; ok && v != nil {
  1222. json.Unmarshal(*v, &a.NormalizedValue)
  1223. }
  1224. if v, ok := aggs["normalized_value_as_string"]; ok && v != nil {
  1225. json.Unmarshal(*v, &a.NormalizedValueAsString)
  1226. }
  1227. if v, ok := aggs["meta"]; ok && v != nil {
  1228. json.Unmarshal(*v, &a.Meta)
  1229. }
  1230. a.Aggregations = aggs
  1231. return nil
  1232. }
  1233. // -- Pipeline stats metric --
  1234. // AggregationPipelineStatsMetric is a simple value, returned e.g. by a
  1235. // MovAvg aggregation.
  1236. type AggregationPipelineStatsMetric struct {
  1237. Aggregations
  1238. Count int64 // `json:"count"`
  1239. CountAsString string // `json:"count_as_string"`
  1240. Min *float64 // `json:"min"`
  1241. MinAsString string // `json:"min_as_string"`
  1242. Max *float64 // `json:"max"`
  1243. MaxAsString string // `json:"max_as_string"`
  1244. Avg *float64 // `json:"avg"`
  1245. AvgAsString string // `json:"avg_as_string"`
  1246. Sum *float64 // `json:"sum"`
  1247. SumAsString string // `json:"sum_as_string"`
  1248. Meta map[string]interface{} // `json:"meta,omitempty"`
  1249. }
  1250. // UnmarshalJSON decodes JSON data and initializes an AggregationPipelineStatsMetric structure.
  1251. func (a *AggregationPipelineStatsMetric) UnmarshalJSON(data []byte) error {
  1252. var aggs map[string]*json.RawMessage
  1253. if err := json.Unmarshal(data, &aggs); err != nil {
  1254. return err
  1255. }
  1256. if v, ok := aggs["count"]; ok && v != nil {
  1257. json.Unmarshal(*v, &a.Count)
  1258. }
  1259. if v, ok := aggs["count_as_string"]; ok && v != nil {
  1260. json.Unmarshal(*v, &a.CountAsString)
  1261. }
  1262. if v, ok := aggs["min"]; ok && v != nil {
  1263. json.Unmarshal(*v, &a.Min)
  1264. }
  1265. if v, ok := aggs["min_as_string"]; ok && v != nil {
  1266. json.Unmarshal(*v, &a.MinAsString)
  1267. }
  1268. if v, ok := aggs["max"]; ok && v != nil {
  1269. json.Unmarshal(*v, &a.Max)
  1270. }
  1271. if v, ok := aggs["max_as_string"]; ok && v != nil {
  1272. json.Unmarshal(*v, &a.MaxAsString)
  1273. }
  1274. if v, ok := aggs["avg"]; ok && v != nil {
  1275. json.Unmarshal(*v, &a.Avg)
  1276. }
  1277. if v, ok := aggs["avg_as_string"]; ok && v != nil {
  1278. json.Unmarshal(*v, &a.AvgAsString)
  1279. }
  1280. if v, ok := aggs["sum"]; ok && v != nil {
  1281. json.Unmarshal(*v, &a.Sum)
  1282. }
  1283. if v, ok := aggs["sum_as_string"]; ok && v != nil {
  1284. json.Unmarshal(*v, &a.SumAsString)
  1285. }
  1286. if v, ok := aggs["meta"]; ok && v != nil {
  1287. json.Unmarshal(*v, &a.Meta)
  1288. }
  1289. a.Aggregations = aggs
  1290. return nil
  1291. }
  1292. // -- Pipeline percentiles
  1293. // AggregationPipelinePercentilesMetric is the value returned by a pipeline
  1294. // percentiles Metric aggregation
  1295. type AggregationPipelinePercentilesMetric struct {
  1296. Aggregations
  1297. Values map[string]float64 // `json:"values"`
  1298. Meta map[string]interface{} // `json:"meta,omitempty"`
  1299. }
  1300. // UnmarshalJSON decodes JSON data and initializes an AggregationPipelinePercentilesMetric structure.
  1301. func (a *AggregationPipelinePercentilesMetric) UnmarshalJSON(data []byte) error {
  1302. var aggs map[string]*json.RawMessage
  1303. if err := json.Unmarshal(data, &aggs); err != nil {
  1304. return err
  1305. }
  1306. if v, ok := aggs["values"]; ok && v != nil {
  1307. json.Unmarshal(*v, &a.Values)
  1308. }
  1309. if v, ok := aggs["meta"]; ok && v != nil {
  1310. json.Unmarshal(*v, &a.Meta)
  1311. }
  1312. a.Aggregations = aggs
  1313. return nil
  1314. }