From a7ad562291cd339ca5c13b03afaffa7f3900d4c0 Mon Sep 17 00:00:00 2001 From: ocshawn Date: Wed, 14 Apr 2021 15:02:12 -0500 Subject: [PATCH 1/2] feat/missingDataFiltersFlag: add missing data flag for inclusion in filters --- README.md | 3 ++- genData/genData.js | 2 +- src/server/__mocks__/config.js | 1 + src/server/config.js | 1 + src/server/es/aggs.js | 7 +++++-- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f91d80db..93cfd528 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,8 @@ You could put following as your config files: "config_index": "${ES_ARRAY_CONFIG}", // optional, if there's array field, Guppy read the configs from this index. "auth_filter_field": "${AUTH_FILTER_FIELD}", "aggs_include_missing_data": true, // optional, by default true, this boolean decide whether elasticsearch aggregation should return missing data in result - "missing_data_alias": "no data", // optional, only valid if `aggs_include_missing_data` is true, guppy will alias missing data into this keyword during aggregation. By default it's set to `no data`. + "missing_data_alias": "no data 21", // optional, only valid if `aggs_include_missing_data` is true, guppy will alias missing data into this keyword during aggregation. By default it's set to `no data`. + "missing_data_display_in_filters": true, // optional, only valid if `aggs_include_missing_data` is true, guppy will not display missing data in filters. } ``` diff --git a/genData/genData.js b/genData/genData.js index 4a60e257..30811d8d 100644 --- a/genData/genData.js +++ b/genData/genData.js @@ -96,7 +96,7 @@ async function run() { const dCopy = { ...d }; Object.keys(dCopy).forEach((key) => { if (fieldValues[key]) { - const index = getRandomInt(0, fieldValues[key].length - 1); + const index = getRandomInt(0, fieldValues[key].length); dCopy[key] = fieldValues[key][index]; } else { switch (schema.items.properties[key].rawType) { diff --git a/src/server/__mocks__/config.js b/src/server/__mocks__/config.js index 4b66f9da..1f115040 100644 --- a/src/server/__mocks__/config.js +++ b/src/server/__mocks__/config.js @@ -15,6 +15,7 @@ const config = { authFilterField: 'gen3_resource_path', aggregationIncludeMissingData: true, missingDataAlias: 'no data', + missingDataInFilters: true, }, port: 3000, diff --git a/src/server/config.js b/src/server/config.js index 894e2a10..04f4bcf7 100644 --- a/src/server/config.js +++ b/src/server/config.js @@ -25,6 +25,7 @@ const config = { authFilterField: inputConfig.auth_filter_field || 'auth_resource_path', aggregationIncludeMissingData: typeof inputConfig.aggs_include_missing_data === 'undefined' ? true : inputConfig.aggs_include_missing_data, missingDataAlias: inputConfig.missing_data_alias || 'no data', + missingDataInFilters: typeof inputConfig.missing_data_display_in_filters === 'undefined' ? true : inputConfig.missing_data_display_in_filters, }, port: 80, path: '/graphql', diff --git a/src/server/es/aggs.js b/src/server/es/aggs.js index 9f91b899..7fc96c33 100644 --- a/src/server/es/aggs.js +++ b/src/server/es/aggs.js @@ -554,7 +554,9 @@ export const textAggregation = async ( let missingAlias = {}; // don't add missing alias to numeric field by default // since the value of missing alias is a string - if (config.esConfig.aggregationIncludeMissingData && !isNumericField) { + if (config.esConfig.aggregationIncludeMissingData + && !isNumericField + && config.esConfig.missingDataInFilters) { missingAlias = { missing: config.esConfig.missingDataAlias }; } const aggsName = `${field}Aggs`; @@ -652,7 +654,8 @@ export const textAggregation = async ( finalResults = finalResults.sort((e1, e2) => e2.count - e1.count); // make the missing data bucket to the bottom of the list - if (config.esConfig.aggregationIncludeMissingData) { + if (config.esConfig.aggregationIncludeMissingData + && config.esConfig.missingDataInFilters) { const missingDataIndex = finalResults .findIndex((b) => b.key === config.esConfig.missingDataAlias); const missingDataItem = finalResults.find((b) => b.key === config.esConfig.missingDataAlias); From dec5c086ebd50b25e8706efae3efd3592dce1ba0 Mon Sep 17 00:00:00 2001 From: ocshawn Date: Wed, 14 Apr 2021 15:34:38 -0500 Subject: [PATCH 2/2] feat/missingDataFiltersFlag: update description text --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93cfd528..4ab7b8c0 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ You could put following as your config files: "config_index": "${ES_ARRAY_CONFIG}", // optional, if there's array field, Guppy read the configs from this index. "auth_filter_field": "${AUTH_FILTER_FIELD}", "aggs_include_missing_data": true, // optional, by default true, this boolean decide whether elasticsearch aggregation should return missing data in result - "missing_data_alias": "no data 21", // optional, only valid if `aggs_include_missing_data` is true, guppy will alias missing data into this keyword during aggregation. By default it's set to `no data`. - "missing_data_display_in_filters": true, // optional, only valid if `aggs_include_missing_data` is true, guppy will not display missing data in filters. + "missing_data_alias": "no data", // optional, only valid if `aggs_include_missing_data` is true, guppy will alias missing data into this keyword during aggregation. By default it's set to `no data`. + "missing_data_display_in_filters": true, // optional, only valid if `aggs_include_missing_data` is true, if false guppy will not display missing data category in filters. } ```