From e7204bef6361f73808fa392a65f382559456a270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Tue, 12 Jan 2016 10:08:35 +0000 Subject: [PATCH 01/42] added source filtering --- .../indices/__tests__/retrieved_field.js | 60 +++++++++ .../settings/sections/indices/_edit.html | 3 +- .../public/settings/sections/indices/_edit.js | 1 + .../settings/sections/indices/_field_types.js | 25 ++-- .../sections/indices/_indexed_fields.js | 7 ++ .../sections/indices/_source_filtering.html | 114 ++++++++++++++++++ .../sections/indices/_source_filtering.js | 44 +++++++ .../sections/indices/retrieved_field.js | 50 ++++++++ .../public/doc_table/__tests__/doc_table.js | 4 + src/ui/public/doc_table/doc_table.js | 4 + .../public/index_patterns/_index_pattern.js | 16 ++- 11 files changed, 317 insertions(+), 11 deletions(-) create mode 100644 src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/_source_filtering.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/_source_filtering.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/retrieved_field.js diff --git a/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js b/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js new file mode 100644 index 0000000000000..0543e77901163 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js @@ -0,0 +1,60 @@ +var expect = require('expect.js'); + +define(function (require) { + var isRetrieved = require('src/plugins/kibana/public/settings/sections/indices/retrieved_field'); + + describe('Settings', function () { + describe('Indices', function () { + describe('isRetrieved(sourceFiltering, name)', function () { + it('should be a function', function () { + expect(isRetrieved).to.be.a(Function); + }); + + it('should retrieve john', function () { + var sourceFiltering = { + include: 'john' + }; + + expect(isRetrieved(sourceFiltering, 'john')).to.be(true); + }); + + it('should not retrieve connor', function () { + var sourceFiltering = { + exclude: 'connor' + }; + + expect(isRetrieved(sourceFiltering, 'connor')).to.be(false); + }); + + it('should retrieve connor', function () { + var sourceFiltering = { + exclude: '*.connor' + }; + + expect(isRetrieved(sourceFiltering, 'connor')).to.be(true); + expect(isRetrieved(sourceFiltering, 'john.connor')).to.be(false); + }); + + it('should not retrieve neither john nor connor', function () { + var sourceFiltering = { + exclude: [ 'john', 'connor' ] + }; + + expect(isRetrieved(sourceFiltering, 'connor')).to.be(false); + expect(isRetrieved(sourceFiltering, 'john')).to.be(false); + expect(isRetrieved(sourceFiltering, 'toto')).to.be(true); + }); + + it('should not retrieve john.*.connor', function () { + var sourceFiltering = { + exclude: 'john.*.connor' + }; + + expect(isRetrieved(sourceFiltering, 'john.j.connor')).to.be(false); + expect(isRetrieved(sourceFiltering, 'john.t.connor')).to.be(false); + expect(isRetrieved(sourceFiltering, 'john.j.watterson')).to.be(true); + }); + }); + }); + }); +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.html b/src/plugins/kibana/public/settings/sections/indices/_edit.html index ee0e6f65a307c..0c865be5a7954 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.html +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.html @@ -41,13 +41,14 @@
  • {{ fieldType.title }} - ({{ fieldType.count }}) + ({{ fieldType.count }})
  • + diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.js b/src/plugins/kibana/public/settings/sections/indices/_edit.js index c9c6388222b83..3504dd14209a0 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.js +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import 'plugins/kibana/settings/sections/indices/_indexed_fields'; import 'plugins/kibana/settings/sections/indices/_scripted_fields'; +import 'plugins/kibana/settings/sections/indices/_source_filtering'; import 'plugins/kibana/settings/sections/indices/_index_header'; import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; import UrlProvider from 'ui/url'; diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_types.js b/src/plugins/kibana/public/settings/sections/indices/_field_types.js index b1336ce1c6973..b8bd0e1a1a870 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_field_types.js +++ b/src/plugins/kibana/public/settings/sections/indices/_field_types.js @@ -11,14 +11,21 @@ export default function GetFieldTypes() { scripted: 0 }); - return [{ - title: 'fields', - index: 'indexedFields', - count: fieldCount.indexed - }, { - title: 'scripted fields', - index: 'scriptedFields', - count: fieldCount.scripted - }]; + return [ + { + title: 'fields', + index: 'indexedFields', + count: fieldCount.indexed + }, + { + title: 'scripted fields', + index: 'scriptedFields', + count: fieldCount.scripted + }, + { + title: 'Retrieved Fields', + index: 'sourceFiltering' + } + ]; }; }; diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 1d0c6f4904223..7d8eed43894c1 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -1,4 +1,5 @@ import _ from 'lodash'; +import isRetrieved from 'plugins/kibana/settings/sections/indices/retrieved_field'; import 'ui/paginated_table'; import nameHtml from 'plugins/kibana/settings/sections/indices/_field_name.html'; import typeHtml from 'plugins/kibana/settings/sections/indices/_field_type.html'; @@ -25,6 +26,7 @@ uiModules.get('apps/settings') { title: 'format' }, { title: 'analyzed', info: 'Analyzed fields may require extra memory to visualize' }, { title: 'indexed', info: 'Fields that are not indexed are unavailable for search' }, + { title: 'retrieved', info: 'Fields that are not retrieved as part of the _source object per hit' }, { title: 'controls', sortable: false } ]; @@ -34,6 +36,7 @@ uiModules.get('apps/settings') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); + const sourceFiltering = $scope.indexPattern.getSourceFiltering(); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count @@ -41,6 +44,7 @@ uiModules.get('apps/settings') const childScope = _.assign($scope.$new(), { field: field }); rowScopes.push(childScope); +<<<<<<< HEAD return [ { markup: nameHtml, @@ -61,6 +65,9 @@ uiModules.get('apps/settings') markup: field.indexed ? yesTemplate : noTemplate, value: field.indexed }, + { + markup: isRetrieved(sourceFiltering, field.displayName) ? yesTemplate : noTemplate + }, { markup: controlsHtml, scope: childScope diff --git a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html new file mode 100644 index 0000000000000..8af8c30333912 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html @@ -0,0 +1,114 @@ +

    Retrieved fields + + +

    Retrieved Fields Help

    +
    +

    + +
    +

    + Retrieved Fields Help +

    + +

    + All fields are by default retrieved and are available inside the "_source" object of each hit. Thanks to the + + source filtering API + + + of Elasticsearch, you can choose which fields are actually retrieved. The value needs to be a JSON object. +

    + +
    + Examples + +

    Exclusion of a single field

    + +
    { + "exclude": "user" +}
    + +

    Exclusion with a path pattern

    +
    { + "exclude": [ + "obj1.*", + "*.value" + ] +}
    + +

    Complete control with exclusions and inclusion

    +
    { + "exclude": "obj1.*", + "include": "obj2.*.val" +}
    +
    + +

    +By default, all fields are retrieved to populate results table. +Sometimes however some fields can be very large and seriously affect performance. This can be often the case when you have materialized one to many relationships, e.g., an entity having many nested entities. Those fields are still useful for searching or analytics but not in a result table.

    +Use this setting to decide what to include or exclude in the data retrieved from the Elasticsearch index.
    +If empty, all fields are retrieved. +

    + +
    +
    {{ sourceFiltering | json }}
    + +
    + +
    +
    diff --git a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js new file mode 100644 index 0000000000000..5026857d6cd26 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js @@ -0,0 +1,44 @@ +define(function (require) { + require('ui/modules').get('apps/settings') + .directive('sourceFiltering', function (Notifier, $window) { + var notify = new Notifier(); + return { + restrict: 'E', + template: require('plugins/kibana/settings/sections/indices/_source_filtering.html'), + link: function ($scope) { + $scope.showHelp = false; + $scope.sourceFiltering = JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); + $scope.save = function () { + try { + var sourceFiltering; + + if ($scope.sourceFiltering) { + sourceFiltering = JSON.parse($scope.sourceFiltering); + if (sourceFiltering.constructor !== Object) { + throw 'You must enter a JSON object with exclude/include field(s)'; + } + for (var att in sourceFiltering) { + if (sourceFiltering.hasOwnProperty(att) && att !== 'exclude' && att !== 'include') { + throw 'The JSON object should have only either an exclude or an include field'; + } + } + $scope.indexPattern.setSourceFiltering(sourceFiltering); + notify.info('Updated the set of retrieved fields'); + } else if ($scope.indexPattern.getSourceFiltering()) { + var confirmIfEmpty = 'The following configuration will be deleted:\n\n' + + JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); + if ($window.confirm(confirmIfEmpty)) { + $scope.indexPattern.setSourceFiltering(undefined); + notify.info('All fields are now retrieved'); + } else { + $scope.sourceFiltering = JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); + } + } + } catch (e) { + notify.error(e); + } + }; + } + }; + }); +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js b/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js new file mode 100644 index 0000000000000..0f7e6098f37bc --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js @@ -0,0 +1,50 @@ +define(function (require) { + /** + * Returns true if the path matches the given pattern + */ + function matchPath(pathPattern, path) { + var pattern = pathPattern.split('.'); + var pathArr = path.split('.'); + + if (pattern.length !== pathArr.length) { + return false; + } + for (var i = 0; i < pattern.length; i++) { + if (pattern[i] !== '*' && pattern[i] !== pathArr[i]) { + return false; + } + } + return true; + } + + function process(val, name) { + if (val.constructor === Array) { + for (var i = 0; i < val.length; i++) { + if (matchPath(val[i], name)) { + return true; + } + } + return false; + } else { + return matchPath(val, name); + } + } + + /** + * Returns true if the field named "name" should be retrieved as part of + * the _source object for each hit. + */ + return function isRetrieved(sourceFiltering, name) { + if (sourceFiltering === undefined) { + return true; + } + if (sourceFiltering.include) { + var inc = sourceFiltering.include; + return process(inc, name); + } else if (sourceFiltering.exclude) { + var exc = sourceFiltering.exclude; + return !process(exc, name); + } + return false; + }; +}); diff --git a/src/ui/public/doc_table/__tests__/doc_table.js b/src/ui/public/doc_table/__tests__/doc_table.js index b5dc9c3dcbbf6..588cc8d82fd44 100644 --- a/src/ui/public/doc_table/__tests__/doc_table.js +++ b/src/ui/public/doc_table/__tests__/doc_table.js @@ -72,6 +72,10 @@ describe('docTable', function () { expect($elem.text()).to.not.be.empty(); }); + it('should set the source filtering defintion', function () { + expect($scope.indexPattern.getSourceFiltering.called).to.be(true); + }); + it('should set the indexPattern to that of the searchSource', function () { expect($scope.indexPattern).to.be(searchSource.get('index')); }); diff --git a/src/ui/public/doc_table/doc_table.js b/src/ui/public/doc_table/doc_table.js index db3148a831525..96333d8dea740 100644 --- a/src/ui/public/doc_table/doc_table.js +++ b/src/ui/public/doc_table/doc_table.js @@ -80,6 +80,10 @@ uiModules.get('kibana') $scope.searchSource.size(config.get('discover:sampleSize')); $scope.searchSource.sort(getSort($scope.sorting, $scope.indexPattern)); + const sourceFiltering = $scope.indexPattern.getSourceFiltering(); + if (sourceFiltering) { + $scope.searchSource.source(sourceFiltering); + } // Set the watcher after initialization $scope.$watchCollection('sorting', function (newSort, oldSort) { diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index c9d15c748ecc2..e3ce0107666ad 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -1,3 +1,4 @@ +<<<<<<< HEAD import _ from 'lodash'; import errors from 'ui/errors'; import angular from 'angular'; @@ -35,6 +36,7 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi timeFieldName: 'string', notExpandable: 'boolean', intervalName: 'string', + sourceFiltering: 'json', fields: 'json', fieldFormatMap: { type: 'string', @@ -119,6 +121,17 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }); }; + // Set the source filtering configuration for that index + self.setSourceFiltering = function (config) { + self.sourceFiltering = config; + self.save(); + }; + + // Get the source filtering configuration for that index + self.getSourceFiltering = function () { + return self.sourceFiltering; + }; + function initFields(fields) { self.fields = new FieldList(self, fields || self.fields || []); } @@ -328,7 +341,8 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi edit: '/settings/indices/{{id}}', addField: '/settings/indices/{{id}}/create-field', indexedFields: '/settings/indices/{{id}}?_a=(tab:indexedFields)', - scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)' + scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)', + sourceFiltering: '/settings/indices/{{id}}?_a=(tab:sourceFiltering)' }; return IndexPattern; From b228c66c0109dec883e802a55af0c86244307d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Wed, 13 Jan 2016 14:44:38 +0000 Subject: [PATCH 02/42] ditched the new 'retrieved fields' tab and added checkbox to exclude a field in the field control --- .../indices/__tests__/retrieved_field.js | 60 --------- .../settings/sections/indices/_edit.html | 3 +- .../sections/indices/_indexed_fields.js | 5 +- .../sections/indices/_source_filtering.html | 114 ------------------ .../sections/indices/_source_filtering.js | 44 ------- .../sections/indices/retrieved_field.js | 50 -------- .../server/lib/init_default_field_props.js | 3 + src/ui/public/doc_table/doc_table.js | 2 +- src/ui/public/field_editor/field_editor.html | 26 ++++ src/ui/public/index_patterns/_field.js | 1 + .../public/index_patterns/_index_pattern.js | 14 ++- .../settings/_index_pattern_create_delete.js | 1 + 12 files changed, 44 insertions(+), 279 deletions(-) delete mode 100644 src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js delete mode 100644 src/plugins/kibana/public/settings/sections/indices/_source_filtering.html delete mode 100644 src/plugins/kibana/public/settings/sections/indices/_source_filtering.js delete mode 100644 src/plugins/kibana/public/settings/sections/indices/retrieved_field.js diff --git a/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js b/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js deleted file mode 100644 index 0543e77901163..0000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/__tests__/retrieved_field.js +++ /dev/null @@ -1,60 +0,0 @@ -var expect = require('expect.js'); - -define(function (require) { - var isRetrieved = require('src/plugins/kibana/public/settings/sections/indices/retrieved_field'); - - describe('Settings', function () { - describe('Indices', function () { - describe('isRetrieved(sourceFiltering, name)', function () { - it('should be a function', function () { - expect(isRetrieved).to.be.a(Function); - }); - - it('should retrieve john', function () { - var sourceFiltering = { - include: 'john' - }; - - expect(isRetrieved(sourceFiltering, 'john')).to.be(true); - }); - - it('should not retrieve connor', function () { - var sourceFiltering = { - exclude: 'connor' - }; - - expect(isRetrieved(sourceFiltering, 'connor')).to.be(false); - }); - - it('should retrieve connor', function () { - var sourceFiltering = { - exclude: '*.connor' - }; - - expect(isRetrieved(sourceFiltering, 'connor')).to.be(true); - expect(isRetrieved(sourceFiltering, 'john.connor')).to.be(false); - }); - - it('should not retrieve neither john nor connor', function () { - var sourceFiltering = { - exclude: [ 'john', 'connor' ] - }; - - expect(isRetrieved(sourceFiltering, 'connor')).to.be(false); - expect(isRetrieved(sourceFiltering, 'john')).to.be(false); - expect(isRetrieved(sourceFiltering, 'toto')).to.be(true); - }); - - it('should not retrieve john.*.connor', function () { - var sourceFiltering = { - exclude: 'john.*.connor' - }; - - expect(isRetrieved(sourceFiltering, 'john.j.connor')).to.be(false); - expect(isRetrieved(sourceFiltering, 'john.t.connor')).to.be(false); - expect(isRetrieved(sourceFiltering, 'john.j.watterson')).to.be(true); - }); - }); - }); - }); -}); diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.html b/src/plugins/kibana/public/settings/sections/indices/_edit.html index 0c865be5a7954..ee0e6f65a307c 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.html +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.html @@ -41,14 +41,13 @@
  • {{ fieldType.title }} - ({{ fieldType.count }}) + ({{ fieldType.count }})
  • - diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 7d8eed43894c1..5f2c492fe5671 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -1,5 +1,4 @@ import _ from 'lodash'; -import isRetrieved from 'plugins/kibana/settings/sections/indices/retrieved_field'; import 'ui/paginated_table'; import nameHtml from 'plugins/kibana/settings/sections/indices/_field_name.html'; import typeHtml from 'plugins/kibana/settings/sections/indices/_field_type.html'; @@ -44,7 +43,6 @@ uiModules.get('apps/settings') const childScope = _.assign($scope.$new(), { field: field }); rowScopes.push(childScope); -<<<<<<< HEAD return [ { markup: nameHtml, @@ -66,7 +64,8 @@ uiModules.get('apps/settings') value: field.indexed }, { - markup: isRetrieved(sourceFiltering, field.displayName) ? yesTemplate : noTemplate + markup: field.exclude ? noTemplate : yesTemplate, + value: field.exclude }, { markup: controlsHtml, diff --git a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html deleted file mode 100644 index 8af8c30333912..0000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.html +++ /dev/null @@ -1,114 +0,0 @@ -

    Retrieved fields - - -

    Retrieved Fields Help

    -
    -

    - -
    -

    - Retrieved Fields Help -

    - -

    - All fields are by default retrieved and are available inside the "_source" object of each hit. Thanks to the - - source filtering API - - - of Elasticsearch, you can choose which fields are actually retrieved. The value needs to be a JSON object. -

    - -
    - Examples - -

    Exclusion of a single field

    - -
    { - "exclude": "user" -}
    - -

    Exclusion with a path pattern

    -
    { - "exclude": [ - "obj1.*", - "*.value" - ] -}
    - -

    Complete control with exclusions and inclusion

    -
    { - "exclude": "obj1.*", - "include": "obj2.*.val" -}
    -
    - -

    -By default, all fields are retrieved to populate results table. -Sometimes however some fields can be very large and seriously affect performance. This can be often the case when you have materialized one to many relationships, e.g., an entity having many nested entities. Those fields are still useful for searching or analytics but not in a result table.

    -Use this setting to decide what to include or exclude in the data retrieved from the Elasticsearch index.
    -If empty, all fields are retrieved. -

    - -
    -
    {{ sourceFiltering | json }}
    - -
    - -
    -
    diff --git a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js b/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js deleted file mode 100644 index 5026857d6cd26..0000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/_source_filtering.js +++ /dev/null @@ -1,44 +0,0 @@ -define(function (require) { - require('ui/modules').get('apps/settings') - .directive('sourceFiltering', function (Notifier, $window) { - var notify = new Notifier(); - return { - restrict: 'E', - template: require('plugins/kibana/settings/sections/indices/_source_filtering.html'), - link: function ($scope) { - $scope.showHelp = false; - $scope.sourceFiltering = JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); - $scope.save = function () { - try { - var sourceFiltering; - - if ($scope.sourceFiltering) { - sourceFiltering = JSON.parse($scope.sourceFiltering); - if (sourceFiltering.constructor !== Object) { - throw 'You must enter a JSON object with exclude/include field(s)'; - } - for (var att in sourceFiltering) { - if (sourceFiltering.hasOwnProperty(att) && att !== 'exclude' && att !== 'include') { - throw 'The JSON object should have only either an exclude or an include field'; - } - } - $scope.indexPattern.setSourceFiltering(sourceFiltering); - notify.info('Updated the set of retrieved fields'); - } else if ($scope.indexPattern.getSourceFiltering()) { - var confirmIfEmpty = 'The following configuration will be deleted:\n\n' + - JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); - if ($window.confirm(confirmIfEmpty)) { - $scope.indexPattern.setSourceFiltering(undefined); - notify.info('All fields are now retrieved'); - } else { - $scope.sourceFiltering = JSON.stringify($scope.indexPattern.getSourceFiltering(), null, ' '); - } - } - } catch (e) { - notify.error(e); - } - }; - } - }; - }); -}); diff --git a/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js b/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js deleted file mode 100644 index 0f7e6098f37bc..0000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/retrieved_field.js +++ /dev/null @@ -1,50 +0,0 @@ -define(function (require) { - /** - * Returns true if the path matches the given pattern - */ - function matchPath(pathPattern, path) { - var pattern = pathPattern.split('.'); - var pathArr = path.split('.'); - - if (pattern.length !== pathArr.length) { - return false; - } - for (var i = 0; i < pattern.length; i++) { - if (pattern[i] !== '*' && pattern[i] !== pathArr[i]) { - return false; - } - } - return true; - } - - function process(val, name) { - if (val.constructor === Array) { - for (var i = 0; i < val.length; i++) { - if (matchPath(val[i], name)) { - return true; - } - } - return false; - } else { - return matchPath(val, name); - } - } - - /** - * Returns true if the field named "name" should be retrieved as part of - * the _source object for each hit. - */ - return function isRetrieved(sourceFiltering, name) { - if (sourceFiltering === undefined) { - return true; - } - if (sourceFiltering.include) { - var inc = sourceFiltering.include; - return process(inc, name); - } else if (sourceFiltering.exclude) { - var exc = sourceFiltering.exclude; - return !process(exc, name); - } - return false; - }; -}); diff --git a/src/plugins/kibana/server/lib/init_default_field_props.js b/src/plugins/kibana/server/lib/init_default_field_props.js index aa8109cc01614..479646382067f 100644 --- a/src/plugins/kibana/server/lib/init_default_field_props.js +++ b/src/plugins/kibana/server/lib/init_default_field_props.js @@ -17,6 +17,7 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: true, doc_values: false, scripted: false, + exclude: false, count: 0 }); @@ -27,6 +28,7 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: false, doc_values: true, scripted: false, + exclude: false, count: 0 }); } @@ -36,6 +38,7 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: false, doc_values: true, scripted: false, + exclude: false, count: 0 }); } diff --git a/src/ui/public/doc_table/doc_table.js b/src/ui/public/doc_table/doc_table.js index 96333d8dea740..29e2eafef9cd6 100644 --- a/src/ui/public/doc_table/doc_table.js +++ b/src/ui/public/doc_table/doc_table.js @@ -80,7 +80,7 @@ uiModules.get('kibana') $scope.searchSource.size(config.get('discover:sampleSize')); $scope.searchSource.sort(getSort($scope.sorting, $scope.indexPattern)); - const sourceFiltering = $scope.indexPattern.getSourceFiltering(); + const sourceFiltering = $scope.indexPattern.getSourceFiltering($scope.columns); if (sourceFiltering) { $scope.searchSource.source(sourceFiltering); } diff --git a/src/ui/public/field_editor/field_editor.html b/src/ui/public/field_editor/field_editor.html index 18e065a6b7b6d..2293bc35ec3c7 100644 --- a/src/ui/public/field_editor/field_editor.html +++ b/src/ui/public/field_editor/field_editor.html @@ -83,6 +83,32 @@

    +
    + + Help + + + + +
    +

    + Field Exclusion +

    + +

    + If checked, this field will not be retrieved as part of the _source object. This is thanks to the + + source filtering API + + + of Elasticsearch. +

    +

    + If this field is explicitly selected in your saved search, then it will not be excluded. +

    +
    +
    +
    diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index a0c4e6a0cba98..7328b101ecfd1 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -46,6 +46,7 @@ export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope obj.fact('name'); obj.fact('type'); obj.writ('count', spec.count || 0); + obj.writ('exclude', spec.exclude); // scripted objs obj.fact('scripted', scripted); diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index e3ce0107666ad..4bf40d380399c 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -1,4 +1,3 @@ -<<<<<<< HEAD import _ from 'lodash'; import errors from 'ui/errors'; import angular from 'angular'; @@ -36,7 +35,6 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi timeFieldName: 'string', notExpandable: 'boolean', intervalName: 'string', - sourceFiltering: 'json', fields: 'json', fieldFormatMap: { type: 'string', @@ -127,9 +125,15 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi self.save(); }; - // Get the source filtering configuration for that index - self.getSourceFiltering = function () { - return self.sourceFiltering; + // Get the source filtering configuration for that index. + // Fields which name appears in the given columns array will not be excluded. + self.getSourceFiltering = function (columns) { + return { + exclude: _(self.getNonScriptedFields()) + .filter((field) => field.exclude && !_.contains(columns, field.name)) + .map((field) => field.name) + .value() + }; }; function initFields(fields) { diff --git a/test/functional/apps/settings/_index_pattern_create_delete.js b/test/functional/apps/settings/_index_pattern_create_delete.js index 3c18fd37222f2..9868df82efddb 100644 --- a/test/functional/apps/settings/_index_pattern_create_delete.js +++ b/test/functional/apps/settings/_index_pattern_create_delete.js @@ -51,6 +51,7 @@ import { 'format', 'analyzed', 'indexed', + 'retrieved', 'controls' ]; From 0d062209fb3b53803ddd2b351fbc71ae6bfcef56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Fri, 15 Jan 2016 15:39:47 +0000 Subject: [PATCH 03/42] disable field exclusion checkbox if field is a metafield --- .../settings/sections/indices/_indexed_fields.js | 8 +++++--- src/ui/public/field_editor/field_editor.html | 12 +++++++++++- src/ui/public/field_editor/field_editor.js | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 5f2c492fe5671..1b81bb55bf66f 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -7,7 +7,7 @@ import uiModules from 'ui/modules'; import indexedFieldsTemplate from 'plugins/kibana/settings/sections/indices/_indexed_fields.html'; uiModules.get('apps/settings') -.directive('indexedFields', function ($filter) { +.directive('indexedFields', function ($filter, config) { const yesTemplate = ''; const noTemplate = ''; const filter = $filter('filter'); @@ -35,12 +35,14 @@ uiModules.get('apps/settings') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); + const metaFields = config.get('metaFields'); const sourceFiltering = $scope.indexPattern.getSourceFiltering(); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count $scope.rows = fields.map(function (field) { const childScope = _.assign($scope.$new(), { field: field }); + const isMetaField = _.contains(metaFields, field.name); rowScopes.push(childScope); return [ @@ -64,8 +66,8 @@ uiModules.get('apps/settings') value: field.indexed }, { - markup: field.exclude ? noTemplate : yesTemplate, - value: field.exclude + markup: isMetaField || !!field.exclude ? noTemplate : yesTemplate, + value: isMetaField || !!field.exclude }, { markup: controlsHtml, diff --git a/src/ui/public/field_editor/field_editor.html b/src/ui/public/field_editor/field_editor.html index 2293bc35ec3c7..7ee38f13ee896 100644 --- a/src/ui/public/field_editor/field_editor.html +++ b/src/ui/public/field_editor/field_editor.html @@ -88,7 +88,17 @@

    Help - + + +
    +

    + Field Exclusion +

    + +

    + You cannot exclude metadata fields. +

    +

    diff --git a/src/ui/public/field_editor/field_editor.js b/src/ui/public/field_editor/field_editor.js index 3b4692eb1120a..6ecdcd36081d8 100644 --- a/src/ui/public/field_editor/field_editor.js +++ b/src/ui/public/field_editor/field_editor.js @@ -24,16 +24,19 @@ uiModules getField: '&field' }, controllerAs: 'editor', - controller: function ($scope, Notifier, kbnUrl) { + controller: function ($scope, Notifier, kbnUrl, config) { let self = this; let notify = new Notifier({ location: 'Field Editor' }); + const metaFields = config.get('metaFields'); + self.scriptingInfo = scriptingInfo; self.scriptingWarning = scriptingWarning; self.indexPattern = $scope.getIndexPattern(); self.field = shadowCopy($scope.getField()); self.formatParams = self.field.format.params(); + $scope.isMetaField = _.contains(metaFields, self.field.name); // only init on first create self.creating = !self.indexPattern.fields.byName[self.field.name]; From c3c1d4823b4bd7141156936fa281f957437fadab Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 21 Jan 2016 09:01:48 -0700 Subject: [PATCH 04/42] [indexPattern] copy excluded field property when refreshing fields --- src/ui/public/index_patterns/_index_pattern.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index 4bf40d380399c..76bd405fab855 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -310,8 +310,18 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }; self._fetchFields = function () { + const existingFieldsByName = self.fields.byName; + return mapper.getFieldsForIndexPattern(self, true) .then(function (fields) { + // copy over kibana-added properties from existing fields + fields.forEach(function (field) { + var existingField = existingFieldsByName[field.name]; + if (existingField) { + field.exclude = existingField.exclude; + } + }); + // append existing scripted fields fields = fields.concat(self.getScriptedFields()); From 5b0b00adfb1844dd144720f76a2568a5f81be98d Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 21 Jan 2016 09:22:52 -0700 Subject: [PATCH 05/42] [indexPattern/field] move isMetaField consideration into Field --- .../public/settings/sections/indices/_indexed_fields.js | 6 +++--- src/ui/public/index_patterns/_field.js | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 1b81bb55bf66f..11b1f1f9b4040 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -35,6 +35,7 @@ uiModules.get('apps/settings') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); +<<<<<<< HEAD const metaFields = config.get('metaFields'); const sourceFiltering = $scope.indexPattern.getSourceFiltering(); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); @@ -42,7 +43,6 @@ uiModules.get('apps/settings') $scope.rows = fields.map(function (field) { const childScope = _.assign($scope.$new(), { field: field }); - const isMetaField = _.contains(metaFields, field.name); rowScopes.push(childScope); return [ @@ -66,8 +66,8 @@ uiModules.get('apps/settings') value: field.indexed }, { - markup: isMetaField || !!field.exclude ? noTemplate : yesTemplate, - value: isMetaField || !!field.exclude + markup: !field.exclude ? yesTemplate : noTemplate, + value: !field.exclude }, { markup: controlsHtml, diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index 7328b101ecfd1..9ad76c47cd0ce 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -1,8 +1,9 @@ +<<<<<<< HEAD import ObjDefine from 'ui/utils/obj_define'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/field_format'; import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { +export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier, config) { let notify = new Notifier({ location: 'IndexPattern Field' }); let FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); let fieldTypes = Private(IndexPatternsFieldTypesProvider); @@ -42,11 +43,12 @@ export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope let scripted = !!spec.scripted; let sortable = spec.name === '_score' || ((indexed || scripted) && type.sortable); let filterable = spec.name === '_id' || scripted || (indexed && type.filterable); + let isMetaField = config.get('metaFields').includes(spec.name); obj.fact('name'); obj.fact('type'); obj.writ('count', spec.count || 0); - obj.writ('exclude', spec.exclude); + obj.fact('exclude', Boolean(!isMetaField && spec.exclude)); // scripted objs obj.fact('scripted', scripted); From 1dee6f173facb571b2b4159140e8165a1286579b Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 21 Jan 2016 09:24:44 -0700 Subject: [PATCH 06/42] [indexPattern/edit] invert the "retreived" column, for accuracy --- .../public/settings/sections/indices/_indexed_fields.js | 7 +++---- .../apps/settings/_index_pattern_create_delete.js | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 11b1f1f9b4040..d00c0a223eb32 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -25,7 +25,7 @@ uiModules.get('apps/settings') { title: 'format' }, { title: 'analyzed', info: 'Analyzed fields may require extra memory to visualize' }, { title: 'indexed', info: 'Fields that are not indexed are unavailable for search' }, - { title: 'retrieved', info: 'Fields that are not retrieved as part of the _source object per hit' }, + { title: 'exclude', info: 'Fields that are not excluded from _source when _source is fetched' }, { title: 'controls', sortable: false } ]; @@ -35,7 +35,6 @@ uiModules.get('apps/settings') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); -<<<<<<< HEAD const metaFields = config.get('metaFields'); const sourceFiltering = $scope.indexPattern.getSourceFiltering(); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); @@ -66,8 +65,8 @@ uiModules.get('apps/settings') value: field.indexed }, { - markup: !field.exclude ? yesTemplate : noTemplate, - value: !field.exclude + markup: field.exclude ? yesTemplate : noTemplate, + value: field.exclude }, { markup: controlsHtml, diff --git a/test/functional/apps/settings/_index_pattern_create_delete.js b/test/functional/apps/settings/_index_pattern_create_delete.js index 9868df82efddb..5a334898ad3fc 100644 --- a/test/functional/apps/settings/_index_pattern_create_delete.js +++ b/test/functional/apps/settings/_index_pattern_create_delete.js @@ -51,7 +51,7 @@ import { 'format', 'analyzed', 'indexed', - 'retrieved', + 'exclude', 'controls' ]; From ec0c3341d19fed64cff57b23ce8851a3aea327ba Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 21 Jan 2016 09:25:24 -0700 Subject: [PATCH 07/42] [indexPattern/field] touchup the field.exclude message --- src/ui/public/field_editor/field_editor.html | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ui/public/field_editor/field_editor.html b/src/ui/public/field_editor/field_editor.html index 7ee38f13ee896..d7b74a224fba9 100644 --- a/src/ui/public/field_editor/field_editor.html +++ b/src/ui/public/field_editor/field_editor.html @@ -106,12 +106,8 @@

    - If checked, this field will not be retrieved as part of the _source object. This is thanks to the - - source filtering API - - - of Elasticsearch. + If checked, this field will be filtered from the _source of each document using + source filtering. This only impacts views that fetch the _source for documents, like Discover or the doc table.

    If this field is explicitly selected in your saved search, then it will not be excluded. From 062931a3f4928452ce1ebd31e5e3a8db3d6e6d90 Mon Sep 17 00:00:00 2001 From: Spencer Date: Thu, 21 Jan 2016 12:33:14 -0700 Subject: [PATCH 08/42] Fix typo --- .../kibana/public/settings/sections/indices/_indexed_fields.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index d00c0a223eb32..2731ca4763d29 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -25,7 +25,7 @@ uiModules.get('apps/settings') { title: 'format' }, { title: 'analyzed', info: 'Analyzed fields may require extra memory to visualize' }, { title: 'indexed', info: 'Fields that are not indexed are unavailable for search' }, - { title: 'exclude', info: 'Fields that are not excluded from _source when _source is fetched' }, + { title: 'exclude', info: 'Fields that are excluded from _source when it is fetched' }, { title: 'controls', sortable: false } ]; From 9d70208f566e1f3598b687fd8ee2070591a188c1 Mon Sep 17 00:00:00 2001 From: spalger Date: Fri, 22 Jan 2016 11:27:45 -0700 Subject: [PATCH 09/42] [indexPattern] handle index patterns without fields --- src/ui/public/index_patterns/_index_pattern.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index 76bd405fab855..b4da828ac149a 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -310,7 +310,7 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }; self._fetchFields = function () { - const existingFieldsByName = self.fields.byName; + const existingFieldsByName = _.get(self, 'fields.byName', {}); return mapper.getFieldsForIndexPattern(self, true) .then(function (fields) { From 5a97b6b668876ed60032472ef0f644aee7e0f2fa Mon Sep 17 00:00:00 2001 From: spalger Date: Fri, 22 Jan 2016 18:08:52 -0700 Subject: [PATCH 10/42] [courier/searchSource] auto add source filter for index pattern --- .../data_source/__tests__/search_source.js | 95 +++++++++++++++++++ .../courier/data_source/search_source.js | 32 ++++++- src/ui/public/doc_table/doc_table.js | 4 - 3 files changed, 123 insertions(+), 8 deletions(-) diff --git a/src/ui/public/courier/data_source/__tests__/search_source.js b/src/ui/public/courier/data_source/__tests__/search_source.js index 7559ef9e88eba..89ea0387958b9 100644 --- a/src/ui/public/courier/data_source/__tests__/search_source.js +++ b/src/ui/public/courier/data_source/__tests__/search_source.js @@ -4,17 +4,25 @@ import sinon from 'auto-release-sinon'; import RequestQueueProv from '../../_request_queue'; import SearchSourceProv from '../search_source'; +import StubIndexPatternProv from 'testUtils/stub_index_pattern'; describe('SearchSource', function () { require('test_utils/no_digest_promises').activateForSuite(); let requestQueue; let SearchSource; + let indexPattern; + let indexPattern2; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { requestQueue = Private(RequestQueueProv); SearchSource = Private(SearchSourceProv); + + const IndexPattern = Private(StubIndexPatternProv); + indexPattern = new IndexPattern('test-*', null, []); + indexPattern2 = new IndexPattern('test2-*', null, []); + expect(indexPattern).to.not.be(indexPattern2); })); describe('#onResults()', function () { @@ -56,4 +64,91 @@ describe('SearchSource', function () { expect(requestQueue).to.have.length(0); }); }); + + describe('#index()', function () { + describe('auto-sourceFiltering', function () { + context('new index pattern assigned', function () { + it('generates a source filter', function () { + const source = new SearchSource(); + expect(source.get('index')).to.be(undefined); + expect(source.get('source')).to.be(undefined); + source.set('index', indexPattern); + expect(source.get('index')).to.be(indexPattern); + expect(source.get('source')).to.be.a('function'); + }); + + it('removes created source filter on removal', function () { + const source = new SearchSource(); + source.set('index', indexPattern); + source.set('index', null); + expect(source.get('index')).to.be(undefined); + expect(source.get('source')).to.be(undefined); + }); + }); + + context('new index pattern assigned over another', function () { + it('replaces source filter with new', function () { + const source = new SearchSource(); + source.set('index', indexPattern); + const sourceFilter1 = source.get('source'); + source.set('index', indexPattern2); + expect(source.get('index')).to.be(indexPattern2); + expect(source.get('source')).to.be.a('function'); + expect(source.get('source')).to.not.be(sourceFilter1); + }); + + it('removes created source filter on removal', function () { + const source = new SearchSource(); + source.set('index', indexPattern); + source.set('index', indexPattern2); + source.set('index', null); + expect(source.get('index')).to.be(undefined); + expect(source.get('source')).to.be(undefined); + }); + }); + + context('ip assigned before custom source filter', function () { + it('custom source filter becomes new source', function () { + const source = new SearchSource(); + const football = {}; + source.set('index', indexPattern); + expect(source.get('source')).to.be.a('function'); + source.set('source', football); + expect(source.get('index')).to.be(indexPattern); + expect(source.get('source')).to.be(football); + }); + + it('custom source stays after removal', function () { + const source = new SearchSource(); + const football = {}; + source.set('index', indexPattern); + source.set('source', football); + source.set('index', null); + expect(source.get('index')).to.be(undefined); + expect(source.get('source')).to.be(football); + }); + }); + + context('ip assigned after custom source filter', function () { + it('leaves the custom filter in place', function () { + const source = new SearchSource(); + const football = {}; + source.set('source', football); + source.set('index', indexPattern); + expect(source.get('index')).to.be(indexPattern); + expect(source.get('source')).to.be(football); + }); + + it('custom source stays after removal', function () { + const source = new SearchSource(); + const football = {}; + source.set('source', football); + source.set('index', indexPattern); + source.set('index', null); + expect(source.get('index')).to.be(undefined); + expect(source.get('source')).to.be(football); + }); + }); + }); + }); }); diff --git a/src/ui/public/courier/data_source/search_source.js b/src/ui/public/courier/data_source/search_source.js index ef0fc31ab733c..5677c179631dc 100644 --- a/src/ui/public/courier/data_source/search_source.js +++ b/src/ui/public/courier/data_source/search_source.js @@ -14,6 +14,12 @@ export default function SearchSourceFactory(Promise, Private) { let searchStrategy = Private(SearchStrategyProvider); let normalizeSortRequest = Private(NormalizeSortRequestProvider); + let forIp = Symbol('for which index pattern?'); + + function isIndexPattern(val) { + return Boolean(val && typeof val.toIndexList === 'function'); + } + _.class(SearchSource).inherits(SourceAbstract); function SearchSource(initialState) { SearchSource.Super.call(this, initialState, searchStrategy); @@ -42,13 +48,31 @@ export default function SearchSourceFactory(Promise, Private) { ]; SearchSource.prototype.index = function (indexPattern) { - if (indexPattern === undefined) return this._state.index; - if (indexPattern === null) return delete this._state.index; - if (!indexPattern || typeof indexPattern.toIndexList !== 'function') { + let state = this._state; + + let hasSource = state.source; + let sourceCameFromIp = hasSource && state.source.hasOwnProperty(forIp); + let sourceIsForOurIp = sourceCameFromIp && state.source[forIp] === state.index; + if (sourceIsForOurIp) { + delete state.source; + } + + if (indexPattern === undefined) return state.index; + if (indexPattern === null) return delete state.index; + if (!isIndexPattern(indexPattern)) { throw new TypeError('expected indexPattern to be an IndexPattern duck.'); } - this._state.index = indexPattern; + state.index = indexPattern; + if (!state.source) { + // imply source filtering based on the index pattern, but allow overriding + // it by simply setting another value for "source". When index is changed + state.source = function () { + return indexPattern.getSourceFiltering(); + }; + state.source[forIp] = indexPattern; + } + return this; }; diff --git a/src/ui/public/doc_table/doc_table.js b/src/ui/public/doc_table/doc_table.js index 29e2eafef9cd6..db3148a831525 100644 --- a/src/ui/public/doc_table/doc_table.js +++ b/src/ui/public/doc_table/doc_table.js @@ -80,10 +80,6 @@ uiModules.get('kibana') $scope.searchSource.size(config.get('discover:sampleSize')); $scope.searchSource.sort(getSort($scope.sorting, $scope.indexPattern)); - const sourceFiltering = $scope.indexPattern.getSourceFiltering($scope.columns); - if (sourceFiltering) { - $scope.searchSource.source(sourceFiltering); - } // Set the watcher after initialization $scope.$watchCollection('sorting', function (newSort, oldSort) { From 8211990a01af86f9cd550106b163bc21d7af79aa Mon Sep 17 00:00:00 2001 From: spalger Date: Fri, 12 Feb 2016 01:17:56 -0700 Subject: [PATCH 11/42] [docTable] remove irrelevant test about source filtering --- src/ui/public/doc_table/__tests__/doc_table.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ui/public/doc_table/__tests__/doc_table.js b/src/ui/public/doc_table/__tests__/doc_table.js index 588cc8d82fd44..b5dc9c3dcbbf6 100644 --- a/src/ui/public/doc_table/__tests__/doc_table.js +++ b/src/ui/public/doc_table/__tests__/doc_table.js @@ -72,10 +72,6 @@ describe('docTable', function () { expect($elem.text()).to.not.be.empty(); }); - it('should set the source filtering defintion', function () { - expect($scope.indexPattern.getSourceFiltering.called).to.be(true); - }); - it('should set the indexPattern to that of the searchSource', function () { expect($scope.indexPattern).to.be(searchSource.get('index')); }); From fa5b22d9ab1ce91bcbffeb7b40c81d9445013dce Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 4 Apr 2016 17:29:36 -0700 Subject: [PATCH 12/42] [settings/indices] cleanup imports --- .../public/settings/sections/indices/_edit.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.js b/src/plugins/kibana/public/settings/sections/indices/_edit.js index 3504dd14209a0..2960ed36089a7 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.js +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.js @@ -1,14 +1,16 @@ import _ from 'lodash'; -import 'plugins/kibana/settings/sections/indices/_indexed_fields'; -import 'plugins/kibana/settings/sections/indices/_scripted_fields'; -import 'plugins/kibana/settings/sections/indices/_source_filtering'; -import 'plugins/kibana/settings/sections/indices/_index_header'; -import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; + import UrlProvider from 'ui/url'; -import PluginsKibanaSettingsSectionsIndicesFieldTypesProvider from 'plugins/kibana/settings/sections/indices/_field_types'; import uiRoutes from 'ui/routes'; import uiModules from 'ui/modules'; -import editTemplate from 'plugins/kibana/settings/sections/indices/_edit.html'; +import Notifier from 'ui/notify/notifier'; + +import RefreshKibanaIndexProvider from './_refresh_kibana_index'; +import FieldTypesProvider from './_field_types'; +import editTemplate from './_edit.html'; +import './_indexed_fields'; +import './_scripted_fields'; +import './_index_header'; uiRoutes .when('/settings/indices/:indexPatternId', { @@ -22,18 +24,18 @@ uiRoutes }); uiModules.get('apps/settings') -.controller('settingsIndicesEdit', function ($scope, $location, $route, config, courier, Notifier, Private, AppState, docTitle) { +.controller('settingsIndicesEdit', function ($scope, $location, $route, config, courier, Private, AppState, docTitle) { const notify = new Notifier(); const $state = $scope.state = new AppState(); - const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); + const refreshKibanaIndex = Private(RefreshKibanaIndexProvider); $scope.kbnUrl = Private(UrlProvider); $scope.indexPattern = $route.current.locals.indexPattern; docTitle.change($scope.indexPattern.id); const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); - const fieldTypes = Private(PluginsKibanaSettingsSectionsIndicesFieldTypesProvider); + const fieldTypes = Private(FieldTypesProvider); $scope.$watch('indexPattern.fields', function () { $scope.fieldTypes = fieldTypes($scope.indexPattern); }); From 7819fa984dfa73985e7cd178132cfeff52e8c6f8 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 4 Apr 2016 23:07:31 -0700 Subject: [PATCH 13/42] [settings/indexPattern/fields] add "field filters" tab --- .../settings/sections/indices/_edit.html | 13 ++-- .../public/settings/sections/indices/_edit.js | 15 ++-- .../settings/sections/indices/_field_tabs.js | 25 +++++++ .../settings/sections/indices/_field_types.js | 31 -------- .../sections/indices/_indexed_fields.js | 5 -- .../sections/indices/_scripted_fields.js | 2 - .../indices/field_filters/field_filters.html | 70 +++++++++++++++++++ .../indices/field_filters/field_filters.js | 61 ++++++++++++++++ .../indices/field_filters/field_filters.less | 29 ++++++++ .../public/index_patterns/_index_pattern.js | 16 +++++ 10 files changed, 216 insertions(+), 51 deletions(-) create mode 100644 src/plugins/kibana/public/settings/sections/indices/_field_tabs.js delete mode 100644 src/plugins/kibana/public/settings/sections/indices/_field_types.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html create mode 100644 src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js create mode 100644 src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.html b/src/plugins/kibana/public/settings/sections/indices/_edit.html index ee0e6f65a307c..68522df7a8031 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.html +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.html @@ -38,16 +38,21 @@

    + +

    diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.js b/src/plugins/kibana/public/settings/sections/indices/_edit.js index 2960ed36089a7..1caace6e0c31e 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.js +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.js @@ -6,10 +6,11 @@ import uiModules from 'ui/modules'; import Notifier from 'ui/notify/notifier'; import RefreshKibanaIndexProvider from './_refresh_kibana_index'; -import FieldTypesProvider from './_field_types'; +import FieldTabsProvider from './_field_tabs'; import editTemplate from './_edit.html'; import './_indexed_fields'; import './_scripted_fields'; +import './field_filters/field_filters'; import './_index_header'; uiRoutes @@ -35,22 +36,18 @@ uiModules.get('apps/settings') docTitle.change($scope.indexPattern.id); const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); - const fieldTypes = Private(FieldTypesProvider); - $scope.$watch('indexPattern.fields', function () { - $scope.fieldTypes = fieldTypes($scope.indexPattern); - }); - + $scope.tabs = Private(FieldTabsProvider); $scope.changeTab = function (obj) { $state.tab = obj.index; $state.save(); }; $scope.$watch('state.tab', function (tab) { - if (!tab) $scope.changeTab($scope.fieldTypes[0]); + if (!tab) $scope.changeTab($scope.tabs[0]); }); - $scope.$watchCollection('indexPattern.fields', function () { - $scope.conflictFields = _.filter($scope.indexPattern.fields, {type: 'conflict'}); + $scope.$watchCollection('indexPattern.fields', function (fields) { + $scope.conflictFields = _.filter(fields, { type: 'conflict' }); }); $scope.refreshFields = function () { diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_tabs.js b/src/plugins/kibana/public/settings/sections/indices/_field_tabs.js new file mode 100644 index 0000000000000..d1389cff0b6a7 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/_field_tabs.js @@ -0,0 +1,25 @@ +import { filter, size } from 'lodash'; +export default function GetFieldTypes() { + const scriptedFieldCount = fields => size(filter(fields, 'scripted')); + + return [ + { + title: 'fields', + index: 'indexedFields', + count({ fields }) { + return size(fields) - scriptedFieldCount(fields); + }, + }, + { + title: 'scripted fields', + index: 'scriptedFields', + count({ fields }) { + return scriptedFieldCount(fields); + }, + }, + { + title: 'field filters', + index: 'fieldFilters' + }, + ]; +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_types.js b/src/plugins/kibana/public/settings/sections/indices/_field_types.js deleted file mode 100644 index b8bd0e1a1a870..0000000000000 --- a/src/plugins/kibana/public/settings/sections/indices/_field_types.js +++ /dev/null @@ -1,31 +0,0 @@ -import _ from 'lodash'; -export default function GetFieldTypes() { - - return function (indexPattern) { - const fieldCount = _.countBy(indexPattern.fields, function (field) { - return (field.scripted) ? 'scripted' : 'indexed'; - }); - - _.defaults(fieldCount, { - indexed: 0, - scripted: 0 - }); - - return [ - { - title: 'fields', - index: 'indexedFields', - count: fieldCount.indexed - }, - { - title: 'scripted fields', - index: 'scriptedFields', - count: fieldCount.scripted - }, - { - title: 'Retrieved Fields', - index: 'sourceFiltering' - } - ]; - }; -}; diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 2731ca4763d29..8df696c256150 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -34,12 +34,7 @@ uiModules.get('apps/settings') function refreshRows() { // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); - - const metaFields = config.get('metaFields'); - const sourceFiltering = $scope.indexPattern.getSourceFiltering(); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); - _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count - $scope.rows = fields.map(function (field) { const childScope = _.assign($scope.$new(), { field: field }); rowScopes.push(childScope); diff --git a/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js b/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js index da6f4b3ebef00..01ec2cc3dd1f7 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js @@ -37,8 +37,6 @@ uiModules.get('apps/settings') rowScopes.length = 0; const fields = filter($scope.indexPattern.getScriptedFields(), $scope.fieldFilter); - _.find($scope.fieldTypes, {index: 'scriptedFields'}).count = fields.length; // Update the tab count - $scope.rows = fields.map(function (field) { const rowScope = $scope.$new(); rowScope.field = field; diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html new file mode 100644 index 0000000000000..f529b61db85c6 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html @@ -0,0 +1,70 @@ +

    Field Filters

    + +

    + Field filters can be used to exclude one or more fields when fetching the document source. This happens in apps like Discover for the doc table. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lowere level. +

    + +
    +
    + +
    + {{ filter.value }} + + +
    + +
    + + + +
    +
    + +
    +
    + + +
    + +
    +
    +
    +
    diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js new file mode 100644 index 0000000000000..da1156ceb0cd4 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js @@ -0,0 +1,61 @@ +import { without } from 'lodash'; + +import uiModules from 'ui/modules'; +import Notifier from 'ui/notify/notifier'; + +import template from './field_filters.html'; +import './field_filters.less'; + +const notify = new Notifier(); + +uiModules.get('kibana') +.directive('settingsIndicesFieldFilters', function () { + return { + restrict: 'E', + scope: { + indexPattern: '=' + }, + template, + controllerAs: 'fieldFilters', + controller: class FieldFiltersController { + constructor($scope) { + if (!$scope.indexPattern) { + throw new Error('index pattern is required'); + } + + this.$scope = $scope; + this.saving = false; + this.editting = null; + this.newValue = null; + } + + all() { + return this.$scope.indexPattern.fieldFilters || []; + } + + delete(filter) { + if (this.editting === filter) { + this.editting = null; + } + + this.$scope.indexPattern.fieldFilters = without(this.all(), filter); + return this.save(); + } + + create() { + const value = this.newValue; + this.newValue = null; + this.$scope.indexPattern.fieldFilters = [...this.all(), { value }]; + return this.save(); + } + + save() { + this.saving = true; + this.$scope.indexPattern.save() + .then(() => this.editting = null) + .catch(notify.error) + .finally(() => this.saving = false); + } + } + }; +}); diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less new file mode 100644 index 0000000000000..f7c3a00c8bdd2 --- /dev/null +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less @@ -0,0 +1,29 @@ +@import (reference) "~ui/styles/variables"; + +settings-indices-field-filters { + .field-filters-container { + margin-top: 15px; + + &.saving { + pointer-events: none; + opacity: .4; + transition: opacity 0.75s; + } + + .field-filter { + display: flex; + align-items: center; + margin: 10px 0; + + > .value { + flex: 1 1 auto; + padding-right: 5px; + font-family: @font-family-monospace; + + :not(input) { + padding-left: 15px; + } + } + } + } +} diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index b4da828ac149a..d1aa0983f919d 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -36,6 +36,7 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi notExpandable: 'boolean', intervalName: 'string', fields: 'json', + fieldFilters: 'json', fieldFormatMap: { type: 'string', _serialize: function (map) { @@ -64,6 +65,9 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi let self = this; setId(id); + if (!self.fieldFilters) { + self.fieldFilters = []; + } let docSource = new DocSource(); @@ -150,6 +154,18 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi } }; + // Get the source filtering configuration for that index. + // Fields which name appears in the given columns array will not be excluded. + self.getSourceFiltering = function (columns) { + return { + exclude: _(self.getNonScriptedFields()) + .filter((field) => field.exclude && !_.contains(columns, field.name)) + .map((field) => field.name) + .concat(self.fieldFilters.map(filter => filter.value)) + .value() + }; + }; + self.addScriptedField = function (name, script, type, lang) { type = type || 'string'; From d4b9c116a610091ccdf4ce4f1b762c56fbc2f2ce Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 4 Apr 2016 23:08:46 -0700 Subject: [PATCH 14/42] [imports] fix old testUtils import --- src/ui/public/courier/data_source/__tests__/search_source.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/public/courier/data_source/__tests__/search_source.js b/src/ui/public/courier/data_source/__tests__/search_source.js index 89ea0387958b9..4137557a40f31 100644 --- a/src/ui/public/courier/data_source/__tests__/search_source.js +++ b/src/ui/public/courier/data_source/__tests__/search_source.js @@ -4,7 +4,7 @@ import sinon from 'auto-release-sinon'; import RequestQueueProv from '../../_request_queue'; import SearchSourceProv from '../search_source'; -import StubIndexPatternProv from 'testUtils/stub_index_pattern'; +import StubIndexPatternProv from 'test_utils/stub_index_pattern'; describe('SearchSource', function () { require('test_utils/no_digest_promises').activateForSuite(); From d75a63fa34cdd94008b53f661c58453b280e21a7 Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 01:02:01 -0700 Subject: [PATCH 15/42] [ui/fieldWildcard] add lib to match names based on field-style wildcards --- src/ui/public/__tests__/field_wildcard.js | 65 +++++++++++++++++++++++ src/ui/public/field_wildcard.js | 11 ++++ 2 files changed, 76 insertions(+) create mode 100644 src/ui/public/__tests__/field_wildcard.js create mode 100644 src/ui/public/field_wildcard.js diff --git a/src/ui/public/__tests__/field_wildcard.js b/src/ui/public/__tests__/field_wildcard.js new file mode 100644 index 0000000000000..41b5755dace73 --- /dev/null +++ b/src/ui/public/__tests__/field_wildcard.js @@ -0,0 +1,65 @@ +import expect from 'expect.js'; + +import { makeRegEx, fieldWildcardFilter } from '../field_wildcard'; + +describe('fieldWildcard', function () { + describe('makeRegEx', function () { + it('matches * in any position', function () { + expect('aaaaaabbbbbbbcccccc').to.match(makeRegEx('*a*b*c*')); + expect('a1234').to.match(makeRegEx('*1234')); + expect('1234a').to.match(makeRegEx('1234*')); + expect('12a34').to.match(makeRegEx('12a34')); + }); + }); + + describe('filter', function () { + it('filters nothing when given an empty array', function () { + const filter = fieldWildcardFilter([]); + const original = [ + 'foo', + 'bar', + 'baz', + 1234 + ]; + + expect(original.filter(filter)).to.eql(original); + }); + + it('filters values that match the globs', function () { + const filter = fieldWildcardFilter([ + 'f*', + '*4' + ]); + + const original = [ + 'foo', + 'bar', + 'baz', + 1234 + ]; + + expect(original.filter(filter)).to.eql(['bar', 'baz']); + }); + + it('handles weird values okay', function () { + const filter = fieldWildcardFilter([ + 'f*', + '*4', + 'undefined' + ]); + + const original = [ + 'foo', + null, + 'bar', + undefined, + {}, + [], + 'baz', + 1234 + ]; + + expect(original.filter(filter)).to.eql([null, 'bar', {}, [], 'baz']); + }); + }); +}); diff --git a/src/ui/public/field_wildcard.js b/src/ui/public/field_wildcard.js new file mode 100644 index 0000000000000..589e4a0eecf03 --- /dev/null +++ b/src/ui/public/field_wildcard.js @@ -0,0 +1,11 @@ +import { memoize } from 'lodash'; + +export const makeRegEx = memoize(function makeRegEx(glob) { + return new RegExp(glob.replace(/\*/g, '.*')); +}); + +export function fieldWildcardFilter(globs) { + return function filter(val) { + return !globs.some(p => makeRegEx(p).test(val)); + }; +} From 08f8fd7e0db2ef30fc9c6e0c7d8b57cb69e86eaf Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 01:59:39 -0700 Subject: [PATCH 16/42] [settings/fieldFilters] list filter matches, remove excluded fields from fieldata_fields --- .../indices/field_filters/field_filters.html | 141 +++++++++++------- .../indices/field_filters/field_filters.js | 12 +- .../indices/field_filters/field_filters.less | 11 +- .../public/courier/data_source/_abstract.js | 6 + src/ui/public/field_wildcard.js | 9 +- 5 files changed, 118 insertions(+), 61 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html index f529b61db85c6..1c6c155125d10 100644 --- a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html @@ -5,66 +5,93 @@

    Field Filters

    -
    -
    - {{ filter.value }} + + + + + + + + + + + +
    + - - +
    + {{ filter.value }} -
    - - - -
    - + +
    -
    -
    - +
    + + + +
    + +
    +
    +
    + -
    - -
    -
    -
    +
    + +
    + + +
    + +
    +

    Known Matches

    +

    + The selected field filters don't match any known fields. +

    +

    + Based on the choosen field filters, these are the known fields that would be excluded from document sources. +

    +
      +
    • {{match}}
    • +
    +
    diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js index da1156ceb0cd4..83cf7dd710f4b 100644 --- a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js @@ -1,7 +1,8 @@ -import { without } from 'lodash'; +import { size, without } from 'lodash'; import uiModules from 'ui/modules'; import Notifier from 'ui/notify/notifier'; +import { fieldWildcardMatcher } from 'ui/field_wildcard'; import template from './field_filters.html'; import './field_filters.less'; @@ -27,10 +28,17 @@ uiModules.get('kibana') this.saving = false; this.editting = null; this.newValue = null; + + $scope.$watch('indexPattern.fieldFilters', (filters) => { + const values = filters.map(f => f.value); + const filter = fieldWildcardMatcher(values); + const matches = $scope.indexPattern.fields.map(f => f.name).filter(filter).sort(); + this.sampleMatches = size(matches) ? matches : null; + }); } all() { - return this.$scope.indexPattern.fieldFilters || []; + return this.$scope.indexPattern.fieldFilters; } delete(filter) { diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less index f7c3a00c8bdd2..80c53d96f0071 100644 --- a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.less @@ -15,7 +15,8 @@ settings-indices-field-filters { align-items: center; margin: 10px 0; - > .value { + .value { + text-align: left; flex: 1 1 auto; padding-right: 5px; font-family: @font-family-monospace; @@ -26,4 +27,12 @@ settings-indices-field-filters { } } } + + .known-matches { + ul li { + font-family: @font-family-monospace; + font-size: @font-size-base; + padding: @table-cell-padding; + } + } } diff --git a/src/ui/public/courier/data_source/_abstract.js b/src/ui/public/courier/data_source/_abstract.js index 16b1f2e4a2e37..377304041ef2b 100644 --- a/src/ui/public/courier/data_source/_abstract.js +++ b/src/ui/public/courier/data_source/_abstract.js @@ -7,6 +7,7 @@ import RequestQueueProvider from '../_request_queue'; import ErrorHandlersProvider from '../_error_handlers'; import FetchProvider from '../fetch'; import DecorateQueryProvider from './_decorate_query'; +import { fieldWildcardFilter } from '../../field_wildcard'; export default function SourceAbstractFactory(Private, Promise, PromiseEmitter) { let requestQueue = Private(RequestQueueProvider); @@ -381,6 +382,11 @@ export default function SourceAbstractFactory(Private, Promise, PromiseEmitter) recurse(agg.aggs || agg.aggregations); }); }(flatState.body.aggs || flatState.body.aggregations)); + + if (flatState.body._source && flatState.body.fielddata_fields) { + const filter = fieldWildcardFilter(flatState.body._source.exclude); + flatState.body.fielddata_fields = flatState.body.fielddata_fields.filter(filter); + } } return flatState; diff --git a/src/ui/public/field_wildcard.js b/src/ui/public/field_wildcard.js index 589e4a0eecf03..2f34777b9a58f 100644 --- a/src/ui/public/field_wildcard.js +++ b/src/ui/public/field_wildcard.js @@ -4,8 +4,15 @@ export const makeRegEx = memoize(function makeRegEx(glob) { return new RegExp(glob.replace(/\*/g, '.*')); }); +export function fieldWildcardMatcher(globs) { + return function matcher(val) { + return globs.some(p => makeRegEx(p).test(val)); + }; +} + export function fieldWildcardFilter(globs) { + const matcher = fieldWildcardMatcher(globs); return function filter(val) { - return !globs.some(p => makeRegEx(p).test(val)); + return !matcher(val); }; } From 385a0620c0b0c7b090f7bff09eab0513c9721ce4 Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 02:13:21 -0700 Subject: [PATCH 17/42] [fieldWildcard] properly escape regexp control chars --- .../public/{ => field_wildcard}/__tests__/field_wildcard.js | 4 ++++ src/ui/public/{ => field_wildcard}/field_wildcard.js | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) rename src/ui/public/{ => field_wildcard}/__tests__/field_wildcard.js (91%) rename src/ui/public/{ => field_wildcard}/field_wildcard.js (75%) diff --git a/src/ui/public/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js similarity index 91% rename from src/ui/public/__tests__/field_wildcard.js rename to src/ui/public/field_wildcard/__tests__/field_wildcard.js index 41b5755dace73..b2b2fb9ad77cd 100644 --- a/src/ui/public/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -10,6 +10,10 @@ describe('fieldWildcard', function () { expect('1234a').to.match(makeRegEx('1234*')); expect('12a34').to.match(makeRegEx('12a34')); }); + + it('properly escapes regexp control characters', function () { + expect('account[user_id]').to.match(makeRegEx('account[*]')); + }); }); describe('filter', function () { diff --git a/src/ui/public/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js similarity index 75% rename from src/ui/public/field_wildcard.js rename to src/ui/public/field_wildcard/field_wildcard.js index 2f34777b9a58f..8ba0b67957659 100644 --- a/src/ui/public/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -1,7 +1,7 @@ -import { memoize } from 'lodash'; +import { escapeRegExp, memoize } from 'lodash'; export const makeRegEx = memoize(function makeRegEx(glob) { - return new RegExp(glob.replace(/\*/g, '.*')); + return new RegExp(glob.split('*').map(escapeRegExp).join('.*')); }); export function fieldWildcardMatcher(globs) { From da62b2a76177c45cae547149055e1347e1f9e250 Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 02:29:03 -0700 Subject: [PATCH 18/42] [settings/indexPatterns] mark fields excluded if they match an exclude pattern --- .../public/settings/sections/indices/_indexed_fields.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 8df696c256150..c240344c22b64 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -5,6 +5,7 @@ import typeHtml from 'plugins/kibana/settings/sections/indices/_field_type.html' import controlsHtml from 'plugins/kibana/settings/sections/indices/_field_controls.html'; import uiModules from 'ui/modules'; import indexedFieldsTemplate from 'plugins/kibana/settings/sections/indices/_indexed_fields.html'; +import { fieldWildcardMatcher } from 'ui/field_wildcard'; uiModules.get('apps/settings') .directive('indexedFields', function ($filter, config) { @@ -35,10 +36,14 @@ uiModules.get('apps/settings') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); + const fieldWildcardMatch = fieldWildcardMatcher($scope.indexPattern.fieldFilters.map(f => f.value)); + $scope.rows = fields.map(function (field) { const childScope = _.assign($scope.$new(), { field: field }); rowScopes.push(childScope); + const excluded = field.exclude || fieldWildcardMatch(field.name); + return [ { markup: nameHtml, @@ -60,8 +65,8 @@ uiModules.get('apps/settings') value: field.indexed }, { - markup: field.exclude ? yesTemplate : noTemplate, - value: field.exclude + markup: excluded ? yesTemplate : noTemplate, + value: excluded }, { markup: controlsHtml, From e89ceeabdc3f6e1c3cdf8778258d7949034416a1 Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 16:59:06 -0700 Subject: [PATCH 19/42] [fieldWildcard] properly bind the regexp to the ends --- src/ui/public/field_wildcard/__tests__/field_wildcard.js | 9 +++++++++ src/ui/public/field_wildcard/field_wildcard.js | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ui/public/field_wildcard/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js index b2b2fb9ad77cd..3ad2eefb21b13 100644 --- a/src/ui/public/field_wildcard/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -14,6 +14,15 @@ describe('fieldWildcard', function () { it('properly escapes regexp control characters', function () { expect('account[user_id]').to.match(makeRegEx('account[*]')); }); + + it('properly limits matches without wildcards', function () { + expect('username').to.match(makeRegEx('*name')); + expect('username').to.match(makeRegEx('user*')); + expect('username').to.match(makeRegEx('username')); + expect('username').to.not.match(makeRegEx('user')); + expect('username').to.not.match(makeRegEx('name')); + expect('username').to.not.match(makeRegEx('erna')); + }); }); describe('filter', function () { diff --git a/src/ui/public/field_wildcard/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js index 8ba0b67957659..e165b5793a295 100644 --- a/src/ui/public/field_wildcard/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -1,7 +1,7 @@ import { escapeRegExp, memoize } from 'lodash'; export const makeRegEx = memoize(function makeRegEx(glob) { - return new RegExp(glob.split('*').map(escapeRegExp).join('.*')); + return new RegExp('^' + glob.split('*').map(escapeRegExp).join('.*') + '$'); }); export function fieldWildcardMatcher(globs) { From 14d5458bb78982c444fc16ae240376617c4647a6 Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 17:00:28 -0700 Subject: [PATCH 20/42] [indexPattern] remove unneeded lodash chain --- src/ui/public/index_patterns/_index_pattern.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index d1aa0983f919d..91ee2a0fe538d 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -158,11 +158,11 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi // Fields which name appears in the given columns array will not be excluded. self.getSourceFiltering = function (columns) { return { - exclude: _(self.getNonScriptedFields()) - .filter((field) => field.exclude && !_.contains(columns, field.name)) - .map((field) => field.name) + exclude: self + .getNonScriptedFields() + .filter(field => field.exclude && !_.contains(columns, field.name)) + .map(field => field.name) .concat(self.fieldFilters.map(filter => filter.value)) - .value() }; }; From dc53a103bc6801419018611471fcade5cba1e13b Mon Sep 17 00:00:00 2001 From: spalger Date: Tue, 5 Apr 2016 17:03:45 -0700 Subject: [PATCH 21/42] [settings/indices] use settings-indices- prefix for tab direcives --- .../public/settings/sections/indices/_edit.html | 12 ++++++++++-- .../settings/sections/indices/_indexed_fields.js | 2 +- .../settings/sections/indices/_scripted_fields.js | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.html b/src/plugins/kibana/public/settings/sections/indices/_edit.html index 68522df7a8031..bd328db709704 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.html +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.html @@ -37,6 +37,7 @@
    + - - + + + + + Date: Thu, 2 Jun 2016 22:29:19 +0100 Subject: [PATCH 22/42] corrected rebase on master --- src/test_utils/stub_index_pattern.js | 1 + src/ui/public/index_patterns/_field.js | 1 - .../public/index_patterns/_index_pattern.js | 20 +------------------ 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/test_utils/stub_index_pattern.js b/src/test_utils/stub_index_pattern.js index 45938e4acba06..47d651644cbae 100644 --- a/src/test_utils/stub_index_pattern.js +++ b/src/test_utils/stub_index_pattern.js @@ -20,6 +20,7 @@ export default function (Private) { this.timeFieldName = timeField; this.getNonScriptedFields = sinon.spy(); this.getScriptedFields = sinon.spy(); + this.getSourceFiltering = sinon.spy(); this.metaFields = ['_id', '_type', '_source']; this.fieldFormatMap = {}; this.routes = IndexPattern.prototype.routes; diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index 9ad76c47cd0ce..b6aeec030f26b 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -1,4 +1,3 @@ -<<<<<<< HEAD import ObjDefine from 'ui/utils/obj_define'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/field_format'; import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index 91ee2a0fe538d..a95eae3f9e474 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -123,23 +123,6 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }); }; - // Set the source filtering configuration for that index - self.setSourceFiltering = function (config) { - self.sourceFiltering = config; - self.save(); - }; - - // Get the source filtering configuration for that index. - // Fields which name appears in the given columns array will not be excluded. - self.getSourceFiltering = function (columns) { - return { - exclude: _(self.getNonScriptedFields()) - .filter((field) => field.exclude && !_.contains(columns, field.name)) - .map((field) => field.name) - .value() - }; - }; - function initFields(fields) { self.fields = new FieldList(self, fields || self.fields || []); } @@ -371,8 +354,7 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi edit: '/settings/indices/{{id}}', addField: '/settings/indices/{{id}}/create-field', indexedFields: '/settings/indices/{{id}}?_a=(tab:indexedFields)', - scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)', - sourceFiltering: '/settings/indices/{{id}}?_a=(tab:sourceFiltering)' + scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)' }; return IndexPattern; From 79e87ca3ae6ab668232655f42b875dd56d2acef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Thu, 9 Jun 2016 09:14:12 +0100 Subject: [PATCH 23/42] Do not match exclusion on meta/scripted fields. Disable filter bar when on 'Filter fields' tab. Removed exclusion checkbox in the field controls page. Corrected typos. Improved documentation phrasing. --- .../settings/sections/indices/_edit.html | 2 +- .../sections/indices/_indexed_fields.js | 7 ++-- .../indices/field_filters/field_filters.html | 8 ++--- .../indices/field_filters/field_filters.js | 7 ++-- .../server/lib/init_default_field_props.js | 3 -- .../public/courier/data_source/_abstract.js | 3 +- src/ui/public/field_editor/field_editor.html | 32 ----------------- src/ui/public/field_editor/field_editor.js | 1 - .../__tests__/field_wildcard.js | 26 +++++++++++++- .../public/field_wildcard/field_wildcard.js | 34 +++++++++++-------- src/ui/public/index_patterns/_field.js | 4 +-- .../public/index_patterns/_index_pattern.js | 19 ++--------- 12 files changed, 63 insertions(+), 83 deletions(-) diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.html b/src/plugins/kibana/public/settings/sections/indices/_edit.html index bd328db709704..f130e019d4f10 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.html +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.html @@ -32,7 +32,7 @@
    - +

    diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index 56b61b06585e1..e04ca71206e75 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -5,13 +5,14 @@ import typeHtml from 'plugins/kibana/settings/sections/indices/_field_type.html' import controlsHtml from 'plugins/kibana/settings/sections/indices/_field_controls.html'; import uiModules from 'ui/modules'; import indexedFieldsTemplate from 'plugins/kibana/settings/sections/indices/_indexed_fields.html'; -import { fieldWildcardMatcher } from 'ui/field_wildcard'; +import FieldWildcardProvider from 'ui/field_wildcard'; uiModules.get('apps/settings') -.directive('settingsIndicesIndexedFields', function ($filter) { +.directive('settingsIndicesIndexedFields', function (Private, $filter) { const yesTemplate = ''; const noTemplate = ''; const filter = $filter('filter'); + const { fieldWildcardMatcher } = Private(FieldWildcardProvider); return { restrict: 'E', @@ -42,7 +43,7 @@ uiModules.get('apps/settings') const childScope = _.assign($scope.$new(), { field: field }); rowScopes.push(childScope); - const excluded = field.exclude || fieldWildcardMatch(field.name); + const excluded = fieldWildcardMatch(field.name); return [ { diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html index 1c6c155125d10..37a2949f907f7 100644 --- a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.html @@ -1,7 +1,7 @@

    Field Filters

    - Field filters can be used to exclude one or more fields when fetching the document source. This happens in apps like Discover for the doc table. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lowere level. + Field filters can be used to exclude one or more fields when fetching the document source. This happens when viewing a document in the Discover app, or with a table displaying results from a saved search in the Dashboard app. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lower level.

    @@ -22,7 +22,7 @@

    Field Filters

    ng-model="filter.value" input-focus ng-if="fieldFilters.editting === filter" - placeholder="field name filter, accepts wildcards (i.e. `user:*`)" + placeholder="field name filter, accepts wildcards (e.g., `user*` to filter fields starting with 'user')" type="text" required class="form-control"> @@ -63,7 +63,7 @@

    Field Filters

    @@ -88,7 +88,7 @@

    Known Matches

    The selected field filters don't match any known fields.

    - Based on the choosen field filters, these are the known fields that would be excluded from document sources. + Based on the chosen field filters, these are the known fields that would be excluded from document sources.

    • {{match}}
    • diff --git a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js index 83cf7dd710f4b..ee5a701d661fb 100644 --- a/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js +++ b/src/plugins/kibana/public/settings/sections/indices/field_filters/field_filters.js @@ -2,7 +2,7 @@ import { size, without } from 'lodash'; import uiModules from 'ui/modules'; import Notifier from 'ui/notify/notifier'; -import { fieldWildcardMatcher } from 'ui/field_wildcard'; +import FieldWildcardProvider from 'ui/field_wildcard'; import template from './field_filters.html'; import './field_filters.less'; @@ -10,7 +10,8 @@ import './field_filters.less'; const notify = new Notifier(); uiModules.get('kibana') -.directive('settingsIndicesFieldFilters', function () { +.directive('settingsIndicesFieldFilters', function (Private) { + const { fieldWildcardMatcher } = Private(FieldWildcardProvider); return { restrict: 'E', scope: { @@ -32,7 +33,7 @@ uiModules.get('kibana') $scope.$watch('indexPattern.fieldFilters', (filters) => { const values = filters.map(f => f.value); const filter = fieldWildcardMatcher(values); - const matches = $scope.indexPattern.fields.map(f => f.name).filter(filter).sort(); + const matches = $scope.indexPattern.getNonScriptedFields().map(f => f.name).filter(filter).sort(); this.sampleMatches = size(matches) ? matches : null; }); } diff --git a/src/plugins/kibana/server/lib/init_default_field_props.js b/src/plugins/kibana/server/lib/init_default_field_props.js index 479646382067f..aa8109cc01614 100644 --- a/src/plugins/kibana/server/lib/init_default_field_props.js +++ b/src/plugins/kibana/server/lib/init_default_field_props.js @@ -17,7 +17,6 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: true, doc_values: false, scripted: false, - exclude: false, count: 0 }); @@ -28,7 +27,6 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: false, doc_values: true, scripted: false, - exclude: false, count: 0 }); } @@ -38,7 +36,6 @@ module.exports = function initDefaultFieldProps(fields) { analyzed: false, doc_values: true, scripted: false, - exclude: false, count: 0 }); } diff --git a/src/ui/public/courier/data_source/_abstract.js b/src/ui/public/courier/data_source/_abstract.js index 377304041ef2b..2b0b447c240b1 100644 --- a/src/ui/public/courier/data_source/_abstract.js +++ b/src/ui/public/courier/data_source/_abstract.js @@ -7,12 +7,13 @@ import RequestQueueProvider from '../_request_queue'; import ErrorHandlersProvider from '../_error_handlers'; import FetchProvider from '../fetch'; import DecorateQueryProvider from './_decorate_query'; -import { fieldWildcardFilter } from '../../field_wildcard'; +import FieldWildcardProvider from '../../field_wildcard'; export default function SourceAbstractFactory(Private, Promise, PromiseEmitter) { let requestQueue = Private(RequestQueueProvider); let errorHandlers = Private(ErrorHandlersProvider); let courierFetch = Private(FetchProvider); + let { fieldWildcardFilter } = Private(FieldWildcardProvider); function SourceAbstract(initialState, strategy) { let self = this; diff --git a/src/ui/public/field_editor/field_editor.html b/src/ui/public/field_editor/field_editor.html index d7b74a224fba9..18e065a6b7b6d 100644 --- a/src/ui/public/field_editor/field_editor.html +++ b/src/ui/public/field_editor/field_editor.html @@ -83,38 +83,6 @@

    -
    - - Help - - - - -
    -

    - Field Exclusion -

    - -

    - You cannot exclude metadata fields. -

    -
    - -
    -

    - Field Exclusion -

    - -

    - If checked, this field will be filtered from the _source of each document using - source filtering. This only impacts views that fetch the _source for documents, like Discover or the doc table. -

    -

    - If this field is explicitly selected in your saved search, then it will not be excluded. -

    -
    -
    -
    diff --git a/src/ui/public/field_editor/field_editor.js b/src/ui/public/field_editor/field_editor.js index 6ecdcd36081d8..6a9cd22dd8b5d 100644 --- a/src/ui/public/field_editor/field_editor.js +++ b/src/ui/public/field_editor/field_editor.js @@ -36,7 +36,6 @@ uiModules self.indexPattern = $scope.getIndexPattern(); self.field = shadowCopy($scope.getField()); self.formatParams = self.field.format.params(); - $scope.isMetaField = _.contains(metaFields, self.field.name); // only init on first create self.creating = !self.indexPattern.fields.byName[self.field.name]; diff --git a/src/ui/public/field_wildcard/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js index 3ad2eefb21b13..9a3af53077d93 100644 --- a/src/ui/public/field_wildcard/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -1,8 +1,20 @@ import expect from 'expect.js'; +import ngMock from 'ng_mock'; -import { makeRegEx, fieldWildcardFilter } from '../field_wildcard'; +import FieldWildcardProvider from '../../field_wildcard'; describe('fieldWildcard', function () { + let fieldWildcardFilter; + let makeRegEx; + + beforeEach(ngMock.module('kibana')); + beforeEach(ngMock.inject(function (config, Private) { + config.set('metaFields', ['_id', '_type', '_source']); + const fieldWildcard = Private(FieldWildcardProvider); + fieldWildcardFilter = fieldWildcard.fieldWildcardFilter; + makeRegEx = fieldWildcard.makeRegEx; + })); + describe('makeRegEx', function () { it('matches * in any position', function () { expect('aaaaaabbbbbbbcccccc').to.match(makeRegEx('*a*b*c*')); @@ -38,6 +50,18 @@ describe('fieldWildcard', function () { expect(original.filter(filter)).to.eql(original); }); + it('does not filter metaFields', function () { + const filter = fieldWildcardFilter([ '_*' ]); + + const original = [ + '_id', + '_type', + '_typefake' + ]; + + expect(original.filter(filter)).to.eql(['_id', '_type']); + }); + it('filters values that match the globs', function () { const filter = fieldWildcardFilter([ 'f*', diff --git a/src/ui/public/field_wildcard/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js index e165b5793a295..a1b5996299042 100644 --- a/src/ui/public/field_wildcard/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -1,18 +1,24 @@ import { escapeRegExp, memoize } from 'lodash'; -export const makeRegEx = memoize(function makeRegEx(glob) { - return new RegExp('^' + glob.split('*').map(escapeRegExp).join('.*') + '$'); -}); +export default function fieldWildcard(config) { + const metaFields = config.get('metaFields'); -export function fieldWildcardMatcher(globs) { - return function matcher(val) { - return globs.some(p => makeRegEx(p).test(val)); - }; -} + const makeRegEx = memoize(function makeRegEx(glob) { + return new RegExp('^' + glob.split('*').map(escapeRegExp).join('.*') + '$'); + }); -export function fieldWildcardFilter(globs) { - const matcher = fieldWildcardMatcher(globs); - return function filter(val) { - return !matcher(val); - }; -} + function fieldWildcardMatcher(globs) { + return function matcher(val) { + return metaFields.indexOf(val) === -1 && globs.some(p => makeRegEx(p).test(val)); + }; + } + + function fieldWildcardFilter(globs) { + const matcher = fieldWildcardMatcher(globs, config); + return function filter(val) { + return !matcher(val); + }; + } + + return { makeRegEx, fieldWildcardMatcher, fieldWildcardFilter }; +}; diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index b6aeec030f26b..a0c4e6a0cba98 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -2,7 +2,7 @@ import ObjDefine from 'ui/utils/obj_define'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/field_format'; import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier, config) { +export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { let notify = new Notifier({ location: 'IndexPattern Field' }); let FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); let fieldTypes = Private(IndexPatternsFieldTypesProvider); @@ -42,12 +42,10 @@ export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope let scripted = !!spec.scripted; let sortable = spec.name === '_score' || ((indexed || scripted) && type.sortable); let filterable = spec.name === '_id' || scripted || (indexed && type.filterable); - let isMetaField = config.get('metaFields').includes(spec.name); obj.fact('name'); obj.fact('type'); obj.writ('count', spec.count || 0); - obj.fact('exclude', Boolean(!isMetaField && spec.exclude)); // scripted objs obj.fact('scripted', scripted); diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index a95eae3f9e474..2a5565851b91a 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -138,14 +138,9 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }; // Get the source filtering configuration for that index. - // Fields which name appears in the given columns array will not be excluded. - self.getSourceFiltering = function (columns) { + self.getSourceFiltering = function () { return { - exclude: self - .getNonScriptedFields() - .filter(field => field.exclude && !_.contains(columns, field.name)) - .map(field => field.name) - .concat(self.fieldFilters.map(filter => filter.value)) + exclude: self.fieldFilters.map(filter => filter.value) }; }; @@ -309,18 +304,8 @@ export default function IndexPatternFactory(Private, timefilter, Notifier, confi }; self._fetchFields = function () { - const existingFieldsByName = _.get(self, 'fields.byName', {}); - return mapper.getFieldsForIndexPattern(self, true) .then(function (fields) { - // copy over kibana-added properties from existing fields - fields.forEach(function (field) { - var existingField = existingFieldsByName[field.name]; - if (existingField) { - field.exclude = existingField.exclude; - } - }); - // append existing scripted fields fields = fields.concat(self.getScriptedFields()); From 3375fd1f02bceda7cb80877bfd2d252444e19092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Thu, 9 Jun 2016 09:35:25 +0100 Subject: [PATCH 24/42] corrected error in merge with _index_pattern --- src/ui/public/index_patterns/_index_pattern.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index d51b852824caa..f411ef78ef443 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -194,7 +194,7 @@ export default function IndexPatternFactory(Private, Notifier, config, kbnIndex, // Get the source filtering configuration for that index. getSourceFiltering() { return { - exclude: self.fieldFilters.map(filter => filter.value) + exclude: this.fieldFilters.map(filter => filter.value) }; } From 6a0b3312978cfd604658a551db3d960f41230cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Thu, 9 Jun 2016 09:56:56 +0100 Subject: [PATCH 25/42] removed unused code --- src/ui/public/field_editor/field_editor.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ui/public/field_editor/field_editor.js b/src/ui/public/field_editor/field_editor.js index 6a9cd22dd8b5d..3b4692eb1120a 100644 --- a/src/ui/public/field_editor/field_editor.js +++ b/src/ui/public/field_editor/field_editor.js @@ -24,12 +24,10 @@ uiModules getField: '&field' }, controllerAs: 'editor', - controller: function ($scope, Notifier, kbnUrl, config) { + controller: function ($scope, Notifier, kbnUrl) { let self = this; let notify = new Notifier({ location: 'Field Editor' }); - const metaFields = config.get('metaFields'); - self.scriptingInfo = scriptingInfo; self.scriptingWarning = scriptingWarning; From c209ce3165afb1290f2a44691ab7b718c3a3cd4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Sat, 11 Jun 2016 10:14:10 +0100 Subject: [PATCH 26/42] added missing fieldFilters to test dumps --- test/fixtures/dump_data/dashboard.data.json | 2 +- .../fixtures/dump_data/dashboard.mapping.json | 2 +- test/fixtures/dump_data/visualize.data.json | 2 +- .../fixtures/dump_data/visualize.mapping.json | 2 +- .../visualize_field-filters.data.json | 1 + .../visualize_field-filters.mapping.json | 1 + .../apps/discover/_field_filters.js | 62 +++++++++++++++++++ test/functional/apps/discover/index.js | 1 + test/support/pages/discover_page.js | 10 +++ 9 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/dump_data/visualize_field-filters.data.json create mode 100644 test/fixtures/dump_data/visualize_field-filters.mapping.json create mode 100644 test/functional/apps/discover/_field_filters.js diff --git a/test/fixtures/dump_data/dashboard.data.json b/test/fixtures/dump_data/dashboard.data.json index 09239ffa6b8f4..9c3e0850beac4 100644 --- a/test/fixtures/dump_data/dashboard.data.json +++ b/test/fixtures/dump_data/dashboard.data.json @@ -1,4 +1,4 @@ -{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"}} +{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]","fieldFilters":"[]"}} {"_index":".kibana","_type":"visualization","_id":"Visualization-TileMap","_score":1,"_source":{"title":"Visualization TileMap","visState":"{\"title\":\"New Visualization\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Scaled Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geo.coordinates\",\"autoPrecision\":true,\"precision\":2}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} {"_index":".kibana","_type":"visualization","_id":"Visualization漢字-LineChart","_score":1,"_source":{"title":"Visualization漢字 LineChart","visState":"{\"title\":\"New Visualization\",\"type\":\"line\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"showCircles\":true,\"smoothLines\":false,\"interpolate\":\"linear\",\"scale\":\"linear\",\"drawLinesBetweenPoints\":true,\"radiusRatio\":9,\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"extension.raw\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"row\":false}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} {"_index":".kibana","_type":"visualization","_id":"Visualization漢字-AreaChart","_score":1,"_source":{"title":"Visualization漢字 AreaChart","visState":"{\"title\":\"New Visualization\",\"type\":\"area\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"smoothLines\":false,\"scale\":\"linear\",\"interpolate\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} diff --git a/test/fixtures/dump_data/dashboard.mapping.json b/test/fixtures/dump_data/dashboard.mapping.json index ff55e2b8221c4..1437a6ca447bc 100644 --- a/test/fixtures/dump_data/dashboard.mapping.json +++ b/test/fixtures/dump_data/dashboard.mapping.json @@ -1 +1 @@ -{".kibana":{"mappings":{"config":{"properties":{"buildNum":{"type":"keyword"}}},"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"search":{"properties":{"columns":{"type":"text"},"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"sort":{"type":"text"},"title":{"type":"text"},"version":{"type":"integer"}}},"visualization":{"properties":{"description":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"uiStateJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"version":{"type":"integer"},"visState":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"server":{"properties":{"uuid":{"type":"keyword"}}},"dashboard":{"properties":{"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"optionsJSON":{"type":"text"},"panelsJSON":{"type":"text"},"timeFrom":{"type":"text"},"timeRestore":{"type":"boolean"},"timeTo":{"type":"text"},"title":{"type":"text"},"uiStateJSON":{"type":"text"},"version":{"type":"integer"}}}}}} +{".kibana":{"mappings":{"config":{"properties":{"buildNum":{"type":"keyword"}}},"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"fieldFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"search":{"properties":{"columns":{"type":"text"},"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"sort":{"type":"text"},"title":{"type":"text"},"version":{"type":"integer"}}},"visualization":{"properties":{"description":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"uiStateJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"version":{"type":"integer"},"visState":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"server":{"properties":{"uuid":{"type":"keyword"}}},"dashboard":{"properties":{"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"optionsJSON":{"type":"text"},"panelsJSON":{"type":"text"},"timeFrom":{"type":"text"},"timeRestore":{"type":"boolean"},"timeTo":{"type":"text"},"title":{"type":"text"},"uiStateJSON":{"type":"text"},"version":{"type":"integer"}}}}}} diff --git a/test/fixtures/dump_data/visualize.data.json b/test/fixtures/dump_data/visualize.data.json index 4fa149045921f..30ce5c09b63a2 100644 --- a/test/fixtures/dump_data/visualize.data.json +++ b/test/fixtures/dump_data/visualize.data.json @@ -1 +1 @@ -{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"}} +{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]","fieldFilters":"[]"}} diff --git a/test/fixtures/dump_data/visualize.mapping.json b/test/fixtures/dump_data/visualize.mapping.json index 8c04223d702eb..98ebe54e932f3 100644 --- a/test/fixtures/dump_data/visualize.mapping.json +++ b/test/fixtures/dump_data/visualize.mapping.json @@ -1 +1 @@ -{".kibana":{"mappings":{"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}} +{".kibana":{"mappings":{"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"fieldFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}} diff --git a/test/fixtures/dump_data/visualize_field-filters.data.json b/test/fixtures/dump_data/visualize_field-filters.data.json new file mode 100644 index 0000000000000..ba6724536a8b2 --- /dev/null +++ b/test/fixtures/dump_data/visualize_field-filters.data.json @@ -0,0 +1 @@ +{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]","fieldFilters":"[{\"value\":\"referer\"}]"}} diff --git a/test/fixtures/dump_data/visualize_field-filters.mapping.json b/test/fixtures/dump_data/visualize_field-filters.mapping.json new file mode 100644 index 0000000000000..98ebe54e932f3 --- /dev/null +++ b/test/fixtures/dump_data/visualize_field-filters.mapping.json @@ -0,0 +1 @@ +{".kibana":{"mappings":{"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"fieldFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}} diff --git a/test/functional/apps/discover/_field_filters.js b/test/functional/apps/discover/_field_filters.js new file mode 100644 index 0000000000000..a893bac3a292a --- /dev/null +++ b/test/functional/apps/discover/_field_filters.js @@ -0,0 +1,62 @@ +import { + bdd, + common, + discoverPage, + headerPage, + settingsPage, + scenarioManager, + esClient, + elasticDump +} from '../../../support'; + +(function () { + var expect = require('expect.js'); + + (function () { + bdd.describe('field filters', function describeIndexTests() { + bdd.before(function () { + + var fromTime = '2015-09-19 06:31:44.000'; + var toTime = '2015-09-23 18:31:44.000'; + + // delete .kibana index and update configDoc + return esClient.deleteAndUpdateConfigDoc({'dateFormat:tz':'UTC', 'defaultIndex':'logstash-*'}) + .then(function loadkibanaIndexPattern() { + common.debug('load kibana index with default index pattern'); + return elasticDump.elasticLoad('visualize_field-filters','.kibana'); + }) + // and load a set of makelogs data + .then(function loadIfEmptyMakelogs() { + return scenarioManager.loadIfEmpty('logstashFunctional'); + }) + .then(function () { + common.debug('discover'); + return common.navigateToApp('discover'); + }) + .then(function () { + common.debug('setAbsoluteRange'); + return headerPage.setAbsoluteRange(fromTime, toTime); + }) + .then(function () { + //After hiding the time picker, we need to wait for + //the refresh button to hide before clicking the share button + return common.sleep(1000); + }) + .catch(common.handleError(this)); + }); + + + bdd.describe('field filters', function () { + + bdd.it('should not get the field referer', function () { + return discoverPage.getAllFieldNames() + .then(function (fieldNames) { + expect(fieldNames).to.not.contain('referer'); + }) + .catch(common.handleError(this)); + }); + + }); + }); + }()); +}()); diff --git a/test/functional/apps/discover/index.js b/test/functional/apps/discover/index.js index 2ff0de8695205..6c29594f42a85 100644 --- a/test/functional/apps/discover/index.js +++ b/test/functional/apps/discover/index.js @@ -16,5 +16,6 @@ import { bdd, remote, scenarioManager, defaultTimeout } from '../../../support'; require('./_field_data'); require('./_shared_links'); require('./_collapse_expand'); + require('./_field_filters'); }); }()); diff --git a/test/support/pages/discover_page.js b/test/support/pages/discover_page.js index 490342eaec861..dccef640a618f 100644 --- a/test/support/pages/discover_page.js +++ b/test/support/pages/discover_page.js @@ -21,6 +21,16 @@ export default (function () { .findByCssSelector('button[aria-label=\'Search\']'); }, + getAllFieldNames: function getAllFieldNames() { + return thisTime + .findAllByClassName('discover-field-name') + .then(function (fields) { + return Promise.all(fields.map(function (field) { + return field.getVisibleText(); + })); + }); + }, + getTimespanText: function getTimespanText() { return thisTime .findByCssSelector('.kibana-nav-options .navbar-timepicker-time-desc pretty-duration') From 153051cac3a4b4716dc9beaa108560ec8380db90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Thu, 30 Jun 2016 10:20:24 +0100 Subject: [PATCH 27/42] corrected merge with master --- .../management/sections/indices/_edit.html | 2 +- .../sections/indices/_field_types.js | 31 +++++++++++++++++++ .../sections/indices/_indexed_fields.js | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/plugins/kibana/public/management/sections/indices/_field_types.js diff --git a/src/plugins/kibana/public/management/sections/indices/_edit.html b/src/plugins/kibana/public/management/sections/indices/_edit.html index e4e7dbc7e18ab..eeb45e25e5655 100644 --- a/src/plugins/kibana/public/management/sections/indices/_edit.html +++ b/src/plugins/kibana/public/management/sections/indices/_edit.html @@ -42,7 +42,7 @@
  • {{ fieldType.title }} - ({{ tab.count(indexPattern) }}) + ({{ fieldType.count }})
  • diff --git a/src/plugins/kibana/public/management/sections/indices/_field_types.js b/src/plugins/kibana/public/management/sections/indices/_field_types.js new file mode 100644 index 0000000000000..d259b7d67c62b --- /dev/null +++ b/src/plugins/kibana/public/management/sections/indices/_field_types.js @@ -0,0 +1,31 @@ +import _ from 'lodash'; +export default function GetFieldTypes() { + + return function (indexPattern) { + const fieldCount = _.countBy(indexPattern.fields, function (field) { + return (field.scripted) ? 'scripted' : 'indexed'; + }); + + _.defaults(fieldCount, { + indexed: 0, + scripted: 0 + }); + + return [ + { + title: 'fields', + index: 'indexedFields', + count: fieldCount.indexed + }, + { + title: 'scripted fields', + index: 'scriptedFields', + count: fieldCount.scripted + }, + { + title: 'field filters', + index: 'fieldFilters' + } + ]; + }; +}; diff --git a/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js index 33cc72707e159..b69fa93e99c66 100644 --- a/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js @@ -38,6 +38,7 @@ uiModules.get('apps/management') _.invoke(rowScopes.splice(0), '$destroy'); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); const fieldWildcardMatch = fieldWildcardMatcher($scope.indexPattern.fieldFilters.map(f => f.value)); + _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count $scope.rows = fields.map(function (field) { const childScope = _.assign($scope.$new(), { field: field }); From deae71cd58570ccbb11a223546fa543acb545e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Mon, 4 Jul 2016 12:13:42 +0100 Subject: [PATCH 28/42] removed default empty array in the index pattern schema, and check if fieldFilters exists --- .../management/sections/indices/_indexed_fields.js | 3 ++- .../sections/indices/field_filters/field_filters.js | 12 +++++++----- .../lib/schemas/resources/index_pattern_schema.js | 2 +- src/ui/public/index_patterns/_index_pattern.js | 5 +---- test/fixtures/dump_data/dashboard.data.json | 2 +- test/fixtures/dump_data/visualize.data.json | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js index b69fa93e99c66..0c419f84ea967 100644 --- a/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/management/sections/indices/_indexed_fields.js @@ -37,7 +37,8 @@ uiModules.get('apps/management') // clear and destroy row scopes _.invoke(rowScopes.splice(0), '$destroy'); const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); - const fieldWildcardMatch = fieldWildcardMatcher($scope.indexPattern.fieldFilters.map(f => f.value)); + const fieldFilters = $scope.indexPattern.fieldFilters && $scope.indexPattern.fieldFilters.map(f => f.value) || []; + const fieldWildcardMatch = fieldWildcardMatcher(fieldFilters); _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count $scope.rows = fields.map(function (field) { diff --git a/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js b/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js index 2c78639e2e669..85956e2d5664c 100644 --- a/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js +++ b/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js @@ -31,15 +31,17 @@ uiModules.get('kibana') this.newValue = null; $scope.$watch('indexPattern.fieldFilters', (filters) => { - const values = filters.map(f => f.value); - const filter = fieldWildcardMatcher(values); - const matches = $scope.indexPattern.getNonScriptedFields().map(f => f.name).filter(filter).sort(); - this.sampleMatches = size(matches) ? matches : null; + if (filters) { + const values = filters.map(f => f.value); + const filter = fieldWildcardMatcher(values); + const matches = $scope.indexPattern.getNonScriptedFields().map(f => f.name).filter(filter).sort(); + this.sampleMatches = size(matches) ? matches : null; + } }); } all() { - return this.$scope.indexPattern.fieldFilters; + return this.$scope.indexPattern.fieldFilters || []; } delete(filter) { diff --git a/src/plugins/kibana/server/lib/schemas/resources/index_pattern_schema.js b/src/plugins/kibana/server/lib/schemas/resources/index_pattern_schema.js index ab9c0cd0a535a..d7721fe7e4d75 100644 --- a/src/plugins/kibana/server/lib/schemas/resources/index_pattern_schema.js +++ b/src/plugins/kibana/server/lib/schemas/resources/index_pattern_schema.js @@ -6,7 +6,7 @@ module.exports = Joi.object({ time_field_name: Joi.string(), interval_name: Joi.string(), not_expandable: Joi.boolean(), - fieldFilters: Joi.string().default('[]'), + field_filters: Joi.array(), fields: Joi.array().items( Joi.object({ name: Joi.string().required(), diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index a552206cc851a..6c352ff4ea24e 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -147,9 +147,6 @@ export default function IndexPatternFactory(Private, Notifier, config, kbnIndex, class IndexPattern { constructor(id) { setId(this, id); - if (!this.fieldFilters) { - this.fieldFilters = []; - } docSources.set(this, new DocSource()); this.metaFields = config.get('metaFields'); @@ -195,7 +192,7 @@ export default function IndexPatternFactory(Private, Notifier, config, kbnIndex, // Get the source filtering configuration for that index. getSourceFiltering() { return { - exclude: this.fieldFilters.map(filter => filter.value) + exclude: this.fieldFilters && this.fieldFilters.map(filter => filter.value) || [] }; } diff --git a/test/fixtures/dump_data/dashboard.data.json b/test/fixtures/dump_data/dashboard.data.json index 9c3e0850beac4..09239ffa6b8f4 100644 --- a/test/fixtures/dump_data/dashboard.data.json +++ b/test/fixtures/dump_data/dashboard.data.json @@ -1,4 +1,4 @@ -{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]","fieldFilters":"[]"}} +{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"}} {"_index":".kibana","_type":"visualization","_id":"Visualization-TileMap","_score":1,"_source":{"title":"Visualization TileMap","visState":"{\"title\":\"New Visualization\",\"type\":\"tile_map\",\"params\":{\"mapType\":\"Scaled Circle Markers\",\"isDesaturated\":true,\"addTooltip\":true,\"heatMaxZoom\":16,\"heatMinOpacity\":0.1,\"heatRadius\":25,\"heatBlur\":15,\"heatNormalizeData\":true,\"wms\":{\"enabled\":false,\"url\":\"https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer\",\"options\":{\"version\":\"1.3.0\",\"layers\":\"0\",\"format\":\"image/png\",\"transparent\":true,\"attribution\":\"Maps provided by USGS\",\"styles\":\"\"}}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"geohash_grid\",\"schema\":\"segment\",\"params\":{\"field\":\"geo.coordinates\",\"autoPrecision\":true,\"precision\":2}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} {"_index":".kibana","_type":"visualization","_id":"Visualization漢字-LineChart","_score":1,"_source":{"title":"Visualization漢字 LineChart","visState":"{\"title\":\"New Visualization\",\"type\":\"line\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"showCircles\":true,\"smoothLines\":false,\"interpolate\":\"linear\",\"scale\":\"linear\",\"drawLinesBetweenPoints\":true,\"radiusRatio\":9,\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"extension.raw\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\",\"row\":false}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} {"_index":".kibana","_type":"visualization","_id":"Visualization漢字-AreaChart","_score":1,"_source":{"title":"Visualization漢字 AreaChart","visState":"{\"title\":\"New Visualization\",\"type\":\"area\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"smoothLines\":false,\"scale\":\"linear\",\"interpolate\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}} diff --git a/test/fixtures/dump_data/visualize.data.json b/test/fixtures/dump_data/visualize.data.json index 30ce5c09b63a2..4fa149045921f 100644 --- a/test/fixtures/dump_data/visualize.data.json +++ b/test/fixtures/dump_data/visualize.data.json @@ -1 +1 @@ -{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]","fieldFilters":"[]"}} +{"_index":".kibana","_type":"index-pattern","_id":"logstash-*","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"referer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"agent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"xss.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.lastname\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.dest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"utc_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.char\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"clientip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"machine.ram\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"links\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"phpmemory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.twitter:card.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:modified_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:site_name.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:tag\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"agent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"headings\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.og:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"request\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"index.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"memory\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"relatedContent.twitter:site\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.coordinates\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"meta.related\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.article:section\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"xss\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"links.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"geo.srcdest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"extension.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"machine.os.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"host.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:type.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"geo.src\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"spaces.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:image:height.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:site_name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:title\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"@message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.twitter:image.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"bytes\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"response\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"meta.user.firstname\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false},{\"name\":\"relatedContent.og:image:width.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.og:description.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"relatedContent.article:published_time\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"}} From 2f771a81a74009a12a15e134f8027627e547f10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Tue, 26 Jul 2016 23:08:45 +0100 Subject: [PATCH 29/42] restricts the source with the exclusion patterns set for that index pattern --- .../sections/indices/field_filters/field_filters.html | 0 .../management/sections/indices/field_filters/field_filters.js | 0 .../sections/indices/field_filters/field_filters.less | 0 src/ui/public/index_patterns/_get_computed_fields.js | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename src/{plugins => core_plugins}/kibana/public/management/sections/indices/field_filters/field_filters.html (100%) rename src/{plugins => core_plugins}/kibana/public/management/sections/indices/field_filters/field_filters.js (100%) rename src/{plugins => core_plugins}/kibana/public/management/sections/indices/field_filters/field_filters.less (100%) diff --git a/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.html b/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html similarity index 100% rename from src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.html rename to src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html diff --git a/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js b/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.js similarity index 100% rename from src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.js rename to src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.js diff --git a/src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.less b/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.less similarity index 100% rename from src/plugins/kibana/public/management/sections/indices/field_filters/field_filters.less rename to src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.less diff --git a/src/ui/public/index_patterns/_get_computed_fields.js b/src/ui/public/index_patterns/_get_computed_fields.js index 5518ec24c789a..1ebf075431b0f 100644 --- a/src/ui/public/index_patterns/_get_computed_fields.js +++ b/src/ui/public/index_patterns/_get_computed_fields.js @@ -19,7 +19,7 @@ export default function () { return { storedFields: ['*'], - _source: true, + _source: self.getSourceFiltering(), scriptFields: scriptFields, fielddataFields: fielddataFields }; From 39c63be9ab9ac4f7c3c7ede4933eb6fd5310778d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Wed, 10 Aug 2016 23:43:47 +0100 Subject: [PATCH 30/42] renamed field filters to source filters and explicitely retrieve the source in the doc controller --- .../kibana/public/doc/controllers/doc.js | 2 +- .../management/sections/indices/_edit.html | 4 ++-- .../management/sections/indices/_field_types.js | 4 ++-- .../indices/field_filters/field_filters.html | 16 ++++++++-------- src/ui/public/index_patterns/_index_pattern.js | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/core_plugins/kibana/public/doc/controllers/doc.js b/src/core_plugins/kibana/public/doc/controllers/doc.js index 97be464e705d1..1ceb4551e4202 100644 --- a/src/core_plugins/kibana/public/doc/controllers/doc.js +++ b/src/core_plugins/kibana/public/doc/controllers/doc.js @@ -51,7 +51,7 @@ app.controller('doc', function ($scope, $route, es, timefilter) { } }, stored_fields: computedFields.storedFields, - _source: computedFields._source, + _source: true, script_fields: computedFields.scriptFields, fielddata_fields: computedFields.fielddataFields } diff --git a/src/core_plugins/kibana/public/management/sections/indices/_edit.html b/src/core_plugins/kibana/public/management/sections/indices/_edit.html index eeb45e25e5655..968cceda42857 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/_edit.html +++ b/src/core_plugins/kibana/public/management/sections/indices/_edit.html @@ -32,7 +32,7 @@
    - +

    @@ -57,7 +57,7 @@ class="fields scripted-fields"> diff --git a/src/core_plugins/kibana/public/management/sections/indices/_field_types.js b/src/core_plugins/kibana/public/management/sections/indices/_field_types.js index d259b7d67c62b..41d478b9cc611 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/_field_types.js +++ b/src/core_plugins/kibana/public/management/sections/indices/_field_types.js @@ -23,8 +23,8 @@ export default function GetFieldTypes() { count: fieldCount.scripted }, { - title: 'field filters', - index: 'fieldFilters' + title: 'source filters', + index: 'sourceFilters' } ]; }; diff --git a/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html b/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html index 37a2949f907f7..6503fd1940f8a 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html +++ b/src/core_plugins/kibana/public/management/sections/indices/field_filters/field_filters.html @@ -1,7 +1,7 @@ -

    Field Filters

    +

    Source Filters

    - Field filters can be used to exclude one or more fields when fetching the document source. This happens when viewing a document in the Discover app, or with a table displaying results from a saved search in the Dashboard app. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lower level. + Source filters can be used to exclude one or more fields when fetching the document source. This happens when viewing a document in the Discover app, or with a table displaying results from a saved search in the Dashboard app. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lower level.

    @@ -30,7 +30,7 @@

    Field Filters

    + + + diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/filter.html b/src/core_plugins/kibana/public/management/sections/indices/source_filters/filter.html new file mode 100644 index 0000000000000..e4817c9920513 --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/filter.html @@ -0,0 +1,12 @@ +
    + {{ filter.value }} + + +
    diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html index 31d9727942b7e..5dcca9118ee0c 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html @@ -6,94 +6,28 @@

    Source Filters

    - - - - - - - - - - - - - - - - - -

    Known Matches

    -
    + +
    + -
    - {{ filter.value }} +
    + +
    +
    + - -
    - -
    - - - -
    - -
    -
    -

    - The source filter doesn't match any known fields. -

    -
      -
    • {{match}}
    • -
    -
    -
    -
    -
    - - -
    - -
    -
    -
    -
    + +
    diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js index 1f3f2ec8a52e5..d75e2262b8118 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js @@ -1,17 +1,22 @@ -import { size, without } from 'lodash'; +import { find, each, escape, invoke, size, without } from 'lodash'; import uiModules from 'ui/modules'; import Notifier from 'ui/notify/notifier'; import FieldWildcardProvider from 'ui/field_wildcard'; +import controlsHtml from 'plugins/kibana/management/sections/indices/source_filters/controls.html'; +import filterHtml from 'plugins/kibana/management/sections/indices/source_filters/filter.html'; import template from './source_filters.html'; import './source_filters.less'; const notify = new Notifier(); uiModules.get('kibana') -.directive('sourceFilters', function (Private) { +.directive('sourceFilters', function (Private, $filter) { + const angularFilter = $filter('filter'); const { fieldWildcardMatcher } = Private(FieldWildcardProvider); + const rowScopes = []; // track row scopes, so they can be destroyed as needed + return { restrict: 'E', scope: { @@ -25,20 +30,59 @@ uiModules.get('kibana') throw new Error('index pattern is required'); } + $scope.perPage = 25; + $scope.columns = [ + { + title: 'filter' + }, + { + title: 'matches', + sortable: false, + info: 'The known fields that match the filter' + }, + { + title: 'controls', + sortable: false + } + ]; + this.$scope = $scope; this.saving = false; this.editing = null; this.newValue = null; this.placeHolder = 'source filter, accepts wildcards (e.g., `user*` to filter fields starting with \'user\')'; - $scope.$watch('indexPattern.sourceFilters', (filters) => { - if (filters) { - this.sampleMatches = []; - for (let i = 0; i < filters.length; i++) { - const filter = fieldWildcardMatcher([ filters[i].value ]); - const matches = $scope.indexPattern.getNonScriptedFields().map(f => f.name).filter(filter).sort(); - this.sampleMatches[i] = size(matches) ? matches : null; - } + $scope.$watchMulti([ '[]indexPattern.sourceFilters', '$parent.fieldFilter' ], () => { + invoke(rowScopes, '$destroy'); + rowScopes.length = 0; + + if ($scope.indexPattern.sourceFilters) { + $scope.rows = []; + each($scope.indexPattern.sourceFilters, (filter) => { + const matcher = fieldWildcardMatcher([ filter.value ]); + // compute which fields match a filter + const matches = $scope.indexPattern.getNonScriptedFields().map(f => f.name).filter(matcher).sort(); + if ($scope.$parent.fieldFilter && !angularFilter(matches, $scope.$parent.fieldFilter).length) { + return; + } + // compute the rows + const rowScope = $scope.$new(); + rowScope.filter = filter; + rowScopes.push(rowScope); + $scope.rows.push([ + { + markup: filterHtml, + scope: rowScope + }, + size(matches) ? escape(matches.join(', ')) : 'The source filter doesn\'t match any known fields.', + { + markup: controlsHtml, + scope: rowScope + } + ]); + }); + // Update the tab count + find($scope.$parent.editSections, {index: 'sourceFilters'}).count = $scope.rows.length; } }); } diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.less b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.less index 69a36aa804eb4..b0a4cc9fcb5e3 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.less +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.less @@ -31,13 +31,4 @@ source-filters { } } } - - .known-matches { - text-align: left; - ul li { - font-family: @font-family-monospace; - font-size: @font-size-base; - padding: @table-cell-padding; - } - } } diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters_controls.html b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters_controls.html new file mode 100644 index 0000000000000..a30c4b2efb93f --- /dev/null +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters_controls.html @@ -0,0 +1,24 @@ +
    + + + +
    diff --git a/src/ui/public/field_wildcard/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js index 9a3af53077d93..732a071662d38 100644 --- a/src/ui/public/field_wildcard/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -50,6 +50,17 @@ describe('fieldWildcard', function () { expect(original.filter(filter)).to.eql(original); }); + it('does not match keyword fields', function () { + const filter = fieldWildcardFilter([ 'a*' ]); + + const original = [ + 'age', + 'age.keyword' + ]; + + expect(original.filter(filter)).to.eql(['age.keyword']); + }); + it('does not filter metaFields', function () { const filter = fieldWildcardFilter([ '_*' ]); diff --git a/src/ui/public/field_wildcard/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js index 1d53e74b22880..40981edaef4c9 100644 --- a/src/ui/public/field_wildcard/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -7,9 +7,20 @@ export default function fieldWildcard(config) { return new RegExp('^' + glob.split('*').map(escapeRegExp).join('.*') + '$'); }); + function endsWith(str, test) { + if (!str || typeof str !== 'string' || str.length < test.length) { + return false; + } + return str.substring(str.length - test.length) === test; + } + function fieldWildcardMatcher(globs) { return function matcher(val) { - return metaFields.indexOf(val) === -1 && globs.some(p => makeRegEx(p).test(val)); + // do not test metaFields or keyword + if (metaFields.indexOf(val) !== -1 || endsWith(val, '.keyword')) { + return false; + } + return globs.some(p => makeRegEx(p).test(val)); }; } diff --git a/src/ui/public/watch_multi/watch_multi.js b/src/ui/public/watch_multi/watch_multi.js index 279076eea4e8b..42a3fd30fe978 100644 --- a/src/ui/public/watch_multi/watch_multi.js +++ b/src/ui/public/watch_multi/watch_multi.js @@ -25,7 +25,7 @@ uiModules.get('kibana') * 4. a function that will be called, like a normal function water * * 5. an object with any of the properties: - * `get`: the getter called on each itteration + * `get`: the getter called on each iteration * `deep`: a flag to turn on objectEquality in $watch * `fn`: the watch registration function ($scope.$watch or $scope.$watchCollection) * From c17d6190c054d92f39cc731166ae31f874d8955b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Fri, 16 Sep 2016 00:58:03 +0100 Subject: [PATCH 38/42] Filter out .raw suffix from possible matches. Removed unused HTML file. Corrected bug that allowed to save an empty source filter. --- .../indices/source_filters/controls.html | 3 ++- .../indices/source_filters/source_filters.js | 3 ++- .../source_filters_controls.html | 24 ------------------- .../__tests__/field_wildcard.js | 11 +++++++++ .../public/field_wildcard/field_wildcard.js | 11 ++------- 5 files changed, 17 insertions(+), 35 deletions(-) delete mode 100644 src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters_controls.html diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/controls.html b/src/core_plugins/kibana/public/management/sections/indices/source_filters/controls.html index 3c83b9a57a2f7..25e236b00b7b2 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/controls.html +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/controls.html @@ -10,7 +10,8 @@ - - - diff --git a/src/ui/public/field_wildcard/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js index 732a071662d38..44e5469b4f15a 100644 --- a/src/ui/public/field_wildcard/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -50,6 +50,17 @@ describe('fieldWildcard', function () { expect(original.filter(filter)).to.eql(original); }); + it('does not match raw fields', function () { + const filter = fieldWildcardFilter([ 'a*' ]); + + const original = [ + 'age', + 'age.raw' + ]; + + expect(original.filter(filter)).to.eql(['age.raw']); + }); + it('does not match keyword fields', function () { const filter = fieldWildcardFilter([ 'a*' ]); diff --git a/src/ui/public/field_wildcard/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js index 40981edaef4c9..6d7c5140939cf 100644 --- a/src/ui/public/field_wildcard/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -1,4 +1,4 @@ -import { escapeRegExp, memoize } from 'lodash'; +import { endsWith, escapeRegExp, memoize } from 'lodash'; export default function fieldWildcard(config) { const metaFields = config.get('metaFields'); @@ -7,17 +7,10 @@ export default function fieldWildcard(config) { return new RegExp('^' + glob.split('*').map(escapeRegExp).join('.*') + '$'); }); - function endsWith(str, test) { - if (!str || typeof str !== 'string' || str.length < test.length) { - return false; - } - return str.substring(str.length - test.length) === test; - } - function fieldWildcardMatcher(globs) { return function matcher(val) { // do not test metaFields or keyword - if (metaFields.indexOf(val) !== -1 || endsWith(val, '.keyword')) { + if (metaFields.indexOf(val) !== -1 || endsWith(val, '.keyword') || endsWith(val, '.raw')) { return false; } return globs.some(p => makeRegEx(p).test(val)); From 925641292991d60ca8c68a8fe7eabf5b7fa31e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Thu, 6 Oct 2016 14:03:04 +0100 Subject: [PATCH 39/42] exclude is deprecated, should be excludes --- src/ui/public/courier/data_source/_abstract.js | 2 +- src/ui/public/index_patterns/_index_pattern.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/public/courier/data_source/_abstract.js b/src/ui/public/courier/data_source/_abstract.js index b8d02030a6a38..0b6832f876ebe 100644 --- a/src/ui/public/courier/data_source/_abstract.js +++ b/src/ui/public/courier/data_source/_abstract.js @@ -295,7 +295,7 @@ export default function SourceAbstractFactory(Private, Promise, PromiseEmitter) if (flatState.body._source) { // exclude source fields for this index pattern specified by the user - const filter = fieldWildcardFilter(flatState.body._source.exclude); + const filter = fieldWildcardFilter(flatState.body._source.excludes); flatState.body.docvalue_fields = flatState.body.docvalue_fields.filter(filter); } } diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index f42d5d76f0edd..d0bb4a21cd5d6 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -203,7 +203,7 @@ export default function IndexPatternFactory(Private, Notifier, config, kbnIndex, // Get the source filtering configuration for that index. getSourceFiltering() { return { - exclude: this.sourceFilters && this.sourceFilters.map(filter => filter.value) || [] + excludes: this.sourceFilters && this.sourceFilters.map(filter => filter.value) || [] }; } From 87eb40251efcbb364927db5c11710fe22c8cf967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Sun, 16 Oct 2016 19:04:05 +0100 Subject: [PATCH 40/42] improved description --- .../sections/indices/source_filters/source_filters.html | 4 ++++ .../sections/indices/source_filters/source_filters.js | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html index 5dcca9118ee0c..f75f1c4b6a1c7 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.html @@ -4,6 +4,10 @@

    Source Filters

    Source filters can be used to exclude one or more fields when fetching the document source. This happens when viewing a document in the Discover app, or with a table displaying results from a saved search in the Dashboard app. Each row is built using the source of a single document, and if you have documents with large or unimportant fields you may benefit from filtering those out at this lower level.

    +

    + Note that multi-fields will incorrectly appear as matches in the table below. These filters only actually apply to fields in the original source document, so matching multi-fields are not actually being filtered. +

    +
    diff --git a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js index aa2210ef8791d..adcb4af477f8b 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js +++ b/src/core_plugins/kibana/public/management/sections/indices/source_filters/source_filters.js @@ -38,8 +38,7 @@ uiModules.get('kibana') { title: 'matches', sortable: false, - info: 'The source fields that match the filter. ' + - 'Multi-fields may show up as a false match but these filters only actually apply to fields in the original source document' + info: 'The source fields that match the filter.' }, { title: 'controls', From 0979aac74d9895adad0cfcb7e96af156f7289509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Tue, 25 Oct 2016 22:08:42 +0100 Subject: [PATCH 41/42] changed as per code review --- .../kibana/public/management/sections/indices/_edit.js | 5 ++--- test/fixtures/dump_data/dashboard.mapping.json | 2 +- test/fixtures/dump_data/visualize.mapping.json | 2 +- test/functional/apps/discover/_source_filters.js | 6 ++---- .../apps/management/_index_pattern_create_delete.js | 1 - 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/core_plugins/kibana/public/management/sections/indices/_edit.js b/src/core_plugins/kibana/public/management/sections/indices/_edit.js index e11e244676c5b..a5f4095d088a9 100644 --- a/src/core_plugins/kibana/public/management/sections/indices/_edit.js +++ b/src/core_plugins/kibana/public/management/sections/indices/_edit.js @@ -5,7 +5,7 @@ import 'plugins/kibana/management/sections/indices/source_filters/source_filters import 'plugins/kibana/management/sections/indices/_index_header'; import RefreshKibanaIndex from 'plugins/kibana/management/sections/indices/_refresh_kibana_index'; import UrlProvider from 'ui/url'; -import IndicesSectionsProvider from 'plugins/kibana/management/sections/indices/_edit_sections'; +import IndicesEditSectionsProvider from 'plugins/kibana/management/sections/indices/_edit_sections'; import uiRoutes from 'ui/routes'; import uiModules from 'ui/modules'; import editTemplate from 'plugins/kibana/management/sections/indices/_edit.html'; @@ -52,9 +52,8 @@ uiModules.get('apps/management') docTitle.change($scope.indexPattern.id); const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); - const editSections = Private(IndicesSectionsProvider); $scope.$watch('indexPattern.fields', function () { - $scope.editSections = editSections($scope.indexPattern); + $scope.editSections = Private(IndicesEditSectionsProvider)($scope.indexPattern); }); $scope.changeTab = function (obj) { diff --git a/test/fixtures/dump_data/dashboard.mapping.json b/test/fixtures/dump_data/dashboard.mapping.json index 1437a6ca447bc..26e8fe97238a6 100644 --- a/test/fixtures/dump_data/dashboard.mapping.json +++ b/test/fixtures/dump_data/dashboard.mapping.json @@ -1 +1 @@ -{".kibana":{"mappings":{"config":{"properties":{"buildNum":{"type":"keyword"}}},"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"fieldFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"search":{"properties":{"columns":{"type":"text"},"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"sort":{"type":"text"},"title":{"type":"text"},"version":{"type":"integer"}}},"visualization":{"properties":{"description":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"uiStateJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"version":{"type":"integer"},"visState":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"server":{"properties":{"uuid":{"type":"keyword"}}},"dashboard":{"properties":{"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"optionsJSON":{"type":"text"},"panelsJSON":{"type":"text"},"timeFrom":{"type":"text"},"timeRestore":{"type":"boolean"},"timeTo":{"type":"text"},"title":{"type":"text"},"uiStateJSON":{"type":"text"},"version":{"type":"integer"}}}}}} +{".kibana":{"mappings":{"config":{"properties":{"buildNum":{"type":"keyword"}}},"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"sourceFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"search":{"properties":{"columns":{"type":"text"},"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"sort":{"type":"text"},"title":{"type":"text"},"version":{"type":"integer"}}},"visualization":{"properties":{"description":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"uiStateJSON":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"version":{"type":"integer"},"visState":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}},"server":{"properties":{"uuid":{"type":"keyword"}}},"dashboard":{"properties":{"description":{"type":"text"},"hits":{"type":"integer"},"kibanaSavedObjectMeta":{"properties":{"searchSourceJSON":{"type":"text"}}},"optionsJSON":{"type":"text"},"panelsJSON":{"type":"text"},"timeFrom":{"type":"text"},"timeRestore":{"type":"boolean"},"timeTo":{"type":"text"},"title":{"type":"text"},"uiStateJSON":{"type":"text"},"version":{"type":"integer"}}}}}} diff --git a/test/fixtures/dump_data/visualize.mapping.json b/test/fixtures/dump_data/visualize.mapping.json index 98ebe54e932f3..f33dbe1faa201 100644 --- a/test/fixtures/dump_data/visualize.mapping.json +++ b/test/fixtures/dump_data/visualize.mapping.json @@ -1 +1 @@ -{".kibana":{"mappings":{"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"fieldFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}} +{".kibana":{"mappings":{"index-pattern":{"properties":{"fields":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"timeFieldName":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"title":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"sourceFilters":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}}} diff --git a/test/functional/apps/discover/_source_filters.js b/test/functional/apps/discover/_source_filters.js index b35c87ef1e31a..563d638ceb06f 100644 --- a/test/functional/apps/discover/_source_filters.js +++ b/test/functional/apps/discover/_source_filters.js @@ -37,8 +37,7 @@ bdd.describe('source filters', function describeIndexTests() { //After hiding the time picker, we need to wait for //the refresh button to hide before clicking the share button return PageObjects.common.sleep(1000); - }) - .catch(PageObjects.common.createErrorHandler(this)); + }); }); bdd.it('should not get the field referer', function () { @@ -47,7 +46,6 @@ bdd.describe('source filters', function describeIndexTests() { expect(fieldNames).to.not.contain('referer'); const relatedContentFields = fieldNames.filter((fieldName) => fieldName.indexOf('relatedContent') === 0); expect(relatedContentFields).to.have.length(0); - }) - .catch(PageObjects.common.createErrorHandler(this)); + }); }); }); diff --git a/test/functional/apps/management/_index_pattern_create_delete.js b/test/functional/apps/management/_index_pattern_create_delete.js index ad4fc3c244e4f..db6c07079d4c3 100644 --- a/test/functional/apps/management/_index_pattern_create_delete.js +++ b/test/functional/apps/management/_index_pattern_create_delete.js @@ -59,7 +59,6 @@ bdd.describe('creating and deleting default index', function describeIndexTests( 'controls' ]; - // 7 name type format analyzed indexed excluded controls expect(headers.length).to.be(expectedHeaders.length); var comparedHeaders = headers.map(function compareHead(header, i) { From 5e96240c94814d15a8a5c4fc232a3bcb64b394c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Campinas?= Date: Tue, 1 Nov 2016 09:16:42 +0000 Subject: [PATCH 42/42] removed filtering logic for keyword and raw fields --- .../__tests__/field_wildcard.js | 22 ------------------- .../public/field_wildcard/field_wildcard.js | 2 +- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/src/ui/public/field_wildcard/__tests__/field_wildcard.js b/src/ui/public/field_wildcard/__tests__/field_wildcard.js index 44e5469b4f15a..9a3af53077d93 100644 --- a/src/ui/public/field_wildcard/__tests__/field_wildcard.js +++ b/src/ui/public/field_wildcard/__tests__/field_wildcard.js @@ -50,28 +50,6 @@ describe('fieldWildcard', function () { expect(original.filter(filter)).to.eql(original); }); - it('does not match raw fields', function () { - const filter = fieldWildcardFilter([ 'a*' ]); - - const original = [ - 'age', - 'age.raw' - ]; - - expect(original.filter(filter)).to.eql(['age.raw']); - }); - - it('does not match keyword fields', function () { - const filter = fieldWildcardFilter([ 'a*' ]); - - const original = [ - 'age', - 'age.keyword' - ]; - - expect(original.filter(filter)).to.eql(['age.keyword']); - }); - it('does not filter metaFields', function () { const filter = fieldWildcardFilter([ '_*' ]); diff --git a/src/ui/public/field_wildcard/field_wildcard.js b/src/ui/public/field_wildcard/field_wildcard.js index 6d7c5140939cf..ee3ca719a4d2b 100644 --- a/src/ui/public/field_wildcard/field_wildcard.js +++ b/src/ui/public/field_wildcard/field_wildcard.js @@ -10,7 +10,7 @@ export default function fieldWildcard(config) { function fieldWildcardMatcher(globs) { return function matcher(val) { // do not test metaFields or keyword - if (metaFields.indexOf(val) !== -1 || endsWith(val, '.keyword') || endsWith(val, '.raw')) { + if (metaFields.indexOf(val) !== -1) { return false; } return globs.some(p => makeRegEx(p).test(val));