UNPKG

kibana-with-account

Version:

kibana-with-account is develop based kibana project

105 lines (88 loc) 2.64 kB
define(function (require) { var _ = require('lodash'); function getFieldValues(hits, field) { var name = field.name; var flattenHit = field.indexPattern.flattenHit; return _.map(hits, function (hit) { return flattenHit(hit)[name]; }); } function getFieldValueCounts(params) { params = _.defaults(params, { count: 5, grouped: false }); if ( params.field.type === 'geo_point' || params.field.type === 'geo_shape' || params.field.type === 'attachment' ) { return { error: 'Analysis is not available for geo fields.' }; } var allValues = getFieldValues(params.hits, params.field); var counts; var missing = _countMissing(allValues); try { var groups = _groupValues(allValues, params); counts = _.map( _.sortBy(groups, 'count').reverse().slice(0, params.count), function (bucket) { return { value: bucket.value, count: bucket.count, percent: (bucket.count / (params.hits.length - missing) * 100).toFixed(1) }; }); if (params.hits.length - missing === 0) { return { error: 'This field is present in your elasticsearch mapping' + ' but not in any documents in the search results.' + ' You may still be able to visualize or search on it.' }; } return { total: params.hits.length, exists: params.hits.length - missing, missing: missing, buckets: counts, }; } catch (e) { return { error: e.message }; } } // returns a count of fields in the array that are undefined or null function _countMissing(array) { return array.length - _.without(array, undefined, null).length; } function _groupValues(allValues, params) { var groups = {}; var k; allValues.forEach(function (value) { if (_.isObject(value) && !_.isArray(value)) { throw new Error('Analysis is not available for object fields'); } if (_.isArray(value) && !params.grouped) { k = value; } else { k = value == null ? undefined : [value]; } _.each(k, function (key) { if (_.has(groups, key)) { groups[key].count++; } else { groups[key] = { value: (params.grouped ? value : key), count: 1 }; } }); }); return groups; } return { _groupValues: _groupValues, _countMissing: _countMissing, getFieldValues: getFieldValues, getFieldValueCounts: getFieldValueCounts }; });