mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
Backports PR #7302 **Commit 1:** add top_hits aggregation * Original sha:22bab6246e
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-05-26T22:02:08Z **Commit 2:** support nested fields * Original sha:8aef2b8f42
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-06-11T14:57:35Z **Commit 3:** added choice of the order and select by default the index pattern associated time field * Original sha:9791ac50e4
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-06-14T21:08:00Z **Commit 4:** improved parameters name and changed aggregation from latest to top to better reflect what this aggregation may accomplish * Original sha:692f41cc6f
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-06-22T20:32:12Z **Commit 5:** made variable a constant * Original sha:39cddab05c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-07-01T22:42:13Z **Commit 6:** use shorter name for variable * Original sha:c6494ccc9c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-07-27T08:50:44Z **Commit 7:** prevent to sort terms on top_hits * Original sha:b365ddc797
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-08-28T09:47:47Z **Commit 8:** Added the top_hits agg to line/pie/tile vis. Added support for function in prop_filter to allow more flexibility when filtering the list of values. The _term order is now the default ordering instead of _custom. * Original sha:be44e905af
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-09-19T14:53:48Z **Commit 9:** simplified tests * Original sha:43767f0929
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-11T09:29:11Z **Commit 10:** changed as per code review * Original sha:53469d51a6
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-11T21:49:36Z **Commit 11:** Top Hit should support all field types on the metric vis * Original sha:20be95006f
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-17T21:18:31Z **Commit 12:** renamed metric to top hit * Original sha:20cbb12e67
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-17T21:28:30Z **Commit 13:** check if there is any result from buckets * Original sha:b99d6c76dd
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-18T09:13:19Z **Commit 14:** support scripted fields * Original sha:f79cdc1531
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-10-23T20:58:55Z **Commit 15:** Merge branch 'master' of github.com:elastic/kibana into latest-value * Original sha:82060ce91f
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-01T09:47:19Z **Commit 16:** Merge branch 'master' of github.com:elastic/kibana into latest-value * Original sha:257729868c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-12T11:30:42Z **Commit 17:** - added logic for trying to get the field value from the source or from a doc_values field. - added onlyAggregatable option for a field agg param to decide whether or not to retain only aggregatable fields. * Original sha:6a2bc0188c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-13T12:34:10Z **Commit 18:** improved loops in getValuesAtPath method * Original sha:991864cdd3
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-16T10:10:28Z **Commit 19:** Merge branch 'master' of github.com:elastic/kibana into latest-value * Original sha:bc1c90ac06
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-17T23:51:13Z **Commit 20:** do not try to get the doc_values field of an IP field * Original sha:d697f11ca1
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-18T00:49:34Z **Commit 21:** improved field tests on the onlyAggregatable option * Original sha:c2249e525f
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-18T01:08:34Z **Commit 22:** use indexPattern.formatField to get all the values at a given path * Original sha:f4200e1bc0
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-19T23:02:18Z **Commit 23:** do not show the analyzed warning * Original sha:2dda53dfb7
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-19T23:30:59Z **Commit 24:** support to sort on scripted field * Original sha:eda9610fa2
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-19T23:52:15Z **Commit 25:** corrected tests and rely on the field's formatter instead of trying to return a nice string * Original sha:b465438176
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-20T14:40:43Z **Commit 26:** do not rely on init_default_field_props to set the doc_values property * Original sha:19e2104745
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-21T23:11:29Z **Commit 27:** added test for the doc_values property * Original sha:fd323f3c2a
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-11-23T10:04:16Z **Commit 28:** Merge branch 'master' of github.com:elastic/kibana into latest-value * Original sha:cfed72ec95
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-05T15:47:45Z **Commit 29:** - corrected source formatter - add option to show/hide analyzed warning of a field * Original sha:30901820de
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-05T22:40:14Z **Commit 30:** set the default value of the showAnalyzedWarning in fieldparam * Original sha:0d924fc73d
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-08T16:29:46Z **Commit 31:** added description of the showAnalyzedWarning option * Original sha:7f85803f73
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-08T16:39:07Z **Commit 32:** use aggParam object to access the options of the field parameter * Original sha:ef95cebf3f
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-09T10:54:51Z **Commit 33:** flattenHit: support object in array * Original sha:b64f92a90e
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-10T23:36:45Z **Commit 34:** added aggregation option to support multivalued fields and top_hits aggregation with a size different than 1 * Original sha:e18a30d292
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-17T13:49:17Z **Commit 35:** disable concatenate aggregation type for visualizations other than table and metric * Original sha:2a2fa67d2a
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-17T15:00:08Z **Commit 36:** corrected display of arrays in the metric vis * Original sha:eb70e84a56
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-17T15:27:36Z **Commit 37:** removed condition on the IP field type when retrieving doc values * Original sha:d19ba5698c
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-17T21:30:47Z **Commit 38:** - do not set a default value for the aggregate with property since it is * Original sha:66d3b31778
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-21T23:04:12Z **Commit 39:** filter out incompatble aggregate options and auto select the option if there is only one * Original sha:1bd472755d
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-28T17:14:21Z **Commit 40:** simplified condition * Original sha:5babf9a512
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-28T23:49:46Z **Commit 41:** lint * Original sha:7372fced4b
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2016-12-30T19:43:08Z **Commit 42:** fix min/max/sum/average aggregate of elements having only null/undefined values * Original sha:0791be7914
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-03T10:40:16Z **Commit 43:** added top_hits metric to heatmap visualization * Original sha:c967a2344d
* Authored by Stéphane Campinas <stephane.campinas@gmail.com> on 2017-01-03T11:16:56Z
71 lines
2 KiB
JavaScript
71 lines
2 KiB
JavaScript
import _ from 'lodash';
|
|
|
|
// Takes a hit, merges it with any stored/scripted fields, and with the metaFields
|
|
// returns a flattened version
|
|
export default function FlattenHitProvider(config) {
|
|
let metaFields = config.get('metaFields');
|
|
|
|
config.watch('metaFields', value => {
|
|
metaFields = value;
|
|
});
|
|
|
|
function flattenHit(indexPattern, hit, deep) {
|
|
const flat = {};
|
|
|
|
// recursively merge _source
|
|
const fields = indexPattern.fields.byName;
|
|
(function flatten(obj, keyPrefix) {
|
|
keyPrefix = keyPrefix ? keyPrefix + '.' : '';
|
|
_.forOwn(obj, function (val, key) {
|
|
key = keyPrefix + key;
|
|
|
|
if (deep) {
|
|
const isNestedField = fields[key] && fields[key].type === 'nested';
|
|
const isArrayOfObjects = _.isArray(val) && _.isPlainObject(_.first(val));
|
|
if (isArrayOfObjects && !isNestedField) {
|
|
_.each(val, v => flatten(v, key));
|
|
return;
|
|
}
|
|
} else if (flat[key] !== void 0) {
|
|
return;
|
|
}
|
|
|
|
const hasValidMapping = fields[key] && fields[key].type !== 'conflict';
|
|
const isValue = !_.isPlainObject(val);
|
|
|
|
if (hasValidMapping || isValue) {
|
|
if (!flat[key]) {
|
|
flat[key] = val;
|
|
} else if (_.isArray(flat[key])) {
|
|
flat[key].push(val);
|
|
} else {
|
|
flat[key] = [ flat[key], val ];
|
|
}
|
|
return;
|
|
}
|
|
|
|
flatten(val, key);
|
|
});
|
|
}(hit._source));
|
|
|
|
// assign the meta fields
|
|
_.each(metaFields, function (meta) {
|
|
if (meta === '_source') return;
|
|
flat[meta] = hit[meta];
|
|
});
|
|
|
|
// unwrap computed fields
|
|
_.forOwn(hit.fields, function (val, key) {
|
|
if (key[0] === '_' && !_.contains(metaFields, key)) return;
|
|
flat[key] = _.isArray(val) && val.length === 1 ? val[0] : val;
|
|
});
|
|
|
|
return flat;
|
|
}
|
|
|
|
return function flattenHitWrapper(indexPattern) {
|
|
return function cachedFlatten(hit, deep = false) {
|
|
return hit.$$_flattened || (hit.$$_flattened = flattenHit(indexPattern, hit, deep));
|
|
};
|
|
};
|
|
}
|