kibana/src/ui/public/index_patterns/_flatten_hit.js
Stéphane Campinas bc61824fd8 add top_hit metric (#9809)
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
2017-01-11 13:55:09 +01:00

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));
};
};
}