From 0189dbcc044f957dcedbb7acaf5fed6b04806d37 Mon Sep 17 00:00:00 2001 From: "Dale R. Hille" Date: Thu, 13 Feb 2020 11:04:57 -0500 Subject: [PATCH 1/2] don't do $text search on the client --- imports/api/resource/resources.js | 10 +++++++- imports/api/resource/server/publications.js | 6 ++--- imports/both/utils.js | 28 ++++++++++++--------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/imports/api/resource/resources.js b/imports/api/resource/resources.js index 6676b95f..60b4d5d7 100644 --- a/imports/api/resource/resources.js +++ b/imports/api/resource/resources.js @@ -26,5 +26,13 @@ Resources.deny({ }); if ( Meteor.isServer ) { - Resources._ensureIndex( { 'cluster_id': 'text', 'searchableData.name': 'text', 'searchableData.namespace': 'text' } ); + Resources._ensureIndex( { + 'cluster_id': 'text', + 'cluster_name': 'text', + 'searchableData.name': 'text', + 'searchableData.namespace': 'text', + 'searchableData.kind': 'text', + 'selfLink': 'text' + }, + {name: 'cluster_id_text_searchableData.name_text_searchableData.namespace_text' } ); } diff --git a/imports/api/resource/server/publications.js b/imports/api/resource/server/publications.js index 0438f020..e12a8ba8 100644 --- a/imports/api/resource/server/publications.js +++ b/imports/api/resource/server/publications.js @@ -99,16 +99,16 @@ Meteor.publish('resourcesSearch', function(orgId, searchStr='', limit=50, fromTi selfLink: 1, created: 1, updated: 1, - searchableData: 1 + searchableData: 1, + deleted: 1 } }; let search = {org_id: orgId, deleted: false }; if (searchStr || fromTime || toTime) { - search = utils.buildSearchForResourcesName(orgId, searchStr, fromTime, toTime); + search = utils.buildSearchForResourcesName(orgId, searchStr, fromTime, toTime, true); if (!search) { return []; } - search.$and.unshift({ $text: { $search: searchStr, $caseSensitive: false } }); } return Resources.find(search, options); }); diff --git a/imports/both/utils.js b/imports/both/utils.js index f1469f1c..fc4654cb 100644 --- a/imports/both/utils.js +++ b/imports/both/utils.js @@ -75,22 +75,26 @@ exports.buildSearchForClusterName = (orgId, searchStr) => { return search; }; -exports.buildSearchForResourcesName = (orgId, searchStr = '', fromTime, toTime) => { +exports.buildSearchForResourcesName = (orgId, searchStr = '', fromTime, toTime, isServer = false) => { var ands = []; var tokens = _.filter(searchStr.split(/\s+/)); if(tokens.length > 0) { ands = _.map(tokens, (token) => { - var searchRegex = {$regex: token, $options: 'i',}; - var ors = [ - {cluster_id: searchRegex,}, - {cluster_name: searchRegex,}, - {kind: searchRegex,}, - {selfLink: searchRegex}, - ]; - var out = { - $or: ors, - }; - return out; + if(isServer) { + return { '$text': { '$search': token, '$caseSensitive': false } }; + } else { + var searchRegex = {$regex: token, $options: 'i',}; + var ors = [ + {cluster_id: searchRegex,}, + {cluster_name: searchRegex,}, + {'searchableData.name': searchRegex}, + {'searchableData.namespace': searchRegex}, + {'searchableData.kind': searchRegex}, + {kind: searchRegex,}, + {selfLink: searchRegex}, + ]; + return { '$or': ors }; + } }); } if(fromTime && toTime){ From 78e6316c2f2ad6b46342f65d254b0776a9bb5bcf Mon Sep 17 00:00:00 2001 From: "Dale R. Hille" Date: Thu, 13 Feb 2020 11:23:54 -0500 Subject: [PATCH 2/2] prevent a crash loop if the index name is different --- imports/api/resource/resources.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/imports/api/resource/resources.js b/imports/api/resource/resources.js index 60b4d5d7..2040c991 100644 --- a/imports/api/resource/resources.js +++ b/imports/api/resource/resources.js @@ -25,14 +25,18 @@ Resources.deny({ remove() { return true; }, }); -if ( Meteor.isServer ) { - Resources._ensureIndex( { - 'cluster_id': 'text', - 'cluster_name': 'text', - 'searchableData.name': 'text', - 'searchableData.namespace': 'text', - 'searchableData.kind': 'text', - 'selfLink': 'text' - }, - {name: 'cluster_id_text_searchableData.name_text_searchableData.namespace_text' } ); +try { + if ( Meteor.isServer ) { + Resources._ensureIndex( { + 'cluster_id': 'text', + 'cluster_name': 'text', + 'searchableData.name': 'text', + 'searchableData.namespace': 'text', + 'searchableData.kind': 'text', + 'selfLink': 'text' + }, + {name: 'cluster_id_text_searchableData.name_text_searchableData.namespace_text' } ); + } +} catch (error) { + console.log(error); }