Commit 072eda28 by Rashid Khan

Added parsing of other multifield values to field mapper. Terms panel now looks…

Added parsing of other multifield values to field mapper. Terms panel now looks for a .raw if one exists and uses it.
parent 48d5c91c
...@@ -19,6 +19,12 @@ ...@@ -19,6 +19,12 @@
</div> </div>
<div><input type="text" class="input-medium" placeholder="Type to filter..." ng-model="fieldFilter"></div> <div><input type="text" class="input-medium" placeholder="Type to filter..." ng-model="fieldFilter"></div>
<div ng-show="panel.all_fields" class="small muted" style="margin-bottom:10px">
<strong>Note</strong> These fields have been<br>
extracted from your mapping.<br>
Not all fields may be available<br>
in your source document.
</div>
<ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;" ng-if="panel.all_fields"> <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;" ng-if="panel.all_fields">
<li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter|orderBy:identity"> <li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter|orderBy:identity">
......
...@@ -22,7 +22,7 @@ function (angular, app, _, $, kbn) { ...@@ -22,7 +22,7 @@ function (angular, app, _, $, kbn) {
var module = angular.module('kibana.panels.terms', []); var module = angular.module('kibana.panels.terms', []);
app.useModule(module); app.useModule(module);
module.controller('terms', function($scope, querySrv, dashboard, filterSrv) { module.controller('terms', function($scope, querySrv, dashboard, filterSrv, fields) {
$scope.panelMeta = { $scope.panelMeta = {
modals : [ modals : [
{ {
...@@ -134,6 +134,9 @@ function (angular, app, _, $, kbn) { ...@@ -134,6 +134,9 @@ function (angular, app, _, $, kbn) {
boolQuery, boolQuery,
queries; queries;
$scope.field = _.contains(fields.list,$scope.panel.field+'.raw') ?
$scope.panel.field+'.raw' : $scope.panel.field;
request = $scope.ejs.Request().indices(dashboard.indices); request = $scope.ejs.Request().indices(dashboard.indices);
$scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries); $scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
...@@ -145,11 +148,10 @@ function (angular, app, _, $, kbn) { ...@@ -145,11 +148,10 @@ function (angular, app, _, $, kbn) {
boolQuery = boolQuery.should(querySrv.toEjsObj(q)); boolQuery = boolQuery.should(querySrv.toEjsObj(q));
}); });
// Terms mode // Terms mode
request = request request = request
.facet($scope.ejs.TermsFacet('terms') .facet($scope.ejs.TermsFacet('terms')
.field($scope.panel.field) .field($scope.field)
.size($scope.panel.size) .size($scope.panel.size)
.order($scope.panel.order) .order($scope.panel.order)
.exclude($scope.panel.exclude) .exclude($scope.panel.exclude)
...@@ -187,10 +189,10 @@ function (angular, app, _, $, kbn) { ...@@ -187,10 +189,10 @@ function (angular, app, _, $, kbn) {
$scope.build_search = function(term,negate) { $scope.build_search = function(term,negate) {
if(_.isUndefined(term.meta)) { if(_.isUndefined(term.meta)) {
filterSrv.set({type:'terms',field:$scope.panel.field,value:term.label, filterSrv.set({type:'terms',field:$scope.field,value:term.label,
mandate:(negate ? 'mustNot':'must')}); mandate:(negate ? 'mustNot':'must')});
} else if(term.meta === 'missing') { } else if(term.meta === 'missing') {
filterSrv.set({type:'exists',field:$scope.panel.field, filterSrv.set({type:'exists',field:$scope.field,
mandate:(negate ? 'must':'mustNot')}); mandate:(negate ? 'must':'mustNot')});
} else { } else {
return; return;
......
...@@ -28,7 +28,6 @@ function (angular, _, config) { ...@@ -28,7 +28,6 @@ function (angular, _, config) {
self.indices = _.union(self.indices,_.keys(result)); self.indices = _.union(self.indices,_.keys(result));
self.list = mapFields(result); self.list = mapFields(result);
}); });
// Otherwise just use the cached mapping
} }
} }
}); });
...@@ -76,13 +75,18 @@ function (angular, _, config) { ...@@ -76,13 +75,18 @@ function (angular, _, config) {
dot = (prefix) ? '.':'', dot = (prefix) ? '.':'',
ret = {}; ret = {};
for(var attr in obj){ for(var attr in obj){
if(attr === 'dynamic_templates' || attr === '_default_') {
continue;
}
// For now only support multi field on the top level // For now only support multi field on the top level
// and if there is a default field set. // and if there is a default field set.
if(obj[attr]['type'] === 'multi_field') { if(obj[attr]['type'] === 'multi_field') {
ret[attr] = obj[attr]['fields'][attr] || obj[attr]; ret[attr] = obj[attr]['fields'][attr] || obj[attr];
continue; var keys = _.without(_.keys(obj[attr]['fields']),attr);
for(var key in keys) {
ret[attr+'.'+keys[key]] = obj[attr]['fields'][keys[key]];
} }
if (attr === 'properties') { } else if (attr === 'properties') {
_.extend(ret,flatten(obj[attr], propName)); _.extend(ret,flatten(obj[attr], propName));
} else if(typeof obj[attr] === 'object'){ } else if(typeof obj[attr] === 'object'){
_.extend(ret,flatten(obj[attr], propName + dot + attr)); _.extend(ret,flatten(obj[attr], propName + dot + attr));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment