From ad9b0bc4f0f9373905e72f22f46697fe29be656c Mon Sep 17 00:00:00 2001 From: Ojas Atkar Date: Thu, 20 Mar 2025 17:06:10 -0700 Subject: [PATCH 1/3] fix(app-degree-pages): improve the search relevancy by displaying title matches first --- .../services/degree-data-manager-service.js | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js index ba16affa1f..0dbbcd47a4 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js +++ b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js @@ -46,10 +46,28 @@ function filterData({ !isAccelConcValid(acceleratedConcurrent) || row[acceleratedConcurrent.value]?.length > 0; - const filterByKeyword = (resolver, searchTerm) => { + const filterByKeywordTitle = (resolver, searchTerm) => { if (!searchTerm) return true; const regex = new RegExp(searchTerm, "i"); - return regex.test(resolver.getFullDescription()); + const title = regex.test(resolver.getMajorDesc()); + if (title){ + return true; + } + else{ + return false; + } + }; + + const filterByKeywordDescription = (resolver, searchTerm) => { + if (!searchTerm) return true; + const regex = new RegExp(searchTerm, "i"); + const description = regex.test(resolver.getFullDescription()); + if (description){ + return true; + } + else{ + return false; + } }; const filterByBlacklist = resolver => @@ -81,13 +99,33 @@ function filterData({ filterByDepartmentCode(resolver) && filterByCampus(resolver) && filterByAcceleratedConcurrent(row) && - filterByKeyword(resolver, keyword) && filterByBlacklist(resolver) && filterGraduateCerts(resolver) ); }; - return programs.filter(applyFilters); + let filteredByTitle = []; + let filteredByDescription = []; + + let newPrograms = programs.filter(degree => { + const resolver = degreeDataPropResolverService(degree); + + if(filterByKeywordTitle(resolver, keyword)) { + if (applyFilters(degree)) { + filteredByTitle.push(degree); + } + return false; + } + + if(filterByKeywordDescription(resolver, keyword)) { + if (applyFilters(degree)) { + filteredByDescription.push(degree); + } + return false; + } + }); + + return filteredByTitle.concat(filteredByDescription); } /** From 43046a8f36984a5cfaf583051697ac546291ca50 Mon Sep 17 00:00:00 2001 From: Ojas Atkar Date: Thu, 27 Mar 2025 16:17:16 -0700 Subject: [PATCH 2/3] fix(app-degree-pages): changes --- .../src/core/services/degree-data-manager-service.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js index 0dbbcd47a4..10c219da9b 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js +++ b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js @@ -106,8 +106,9 @@ function filterData({ let filteredByTitle = []; let filteredByDescription = []; + let newPrograms; - let newPrograms = programs.filter(degree => { + newPrograms = programs.filter(degree => { const resolver = degreeDataPropResolverService(degree); if(filterByKeywordTitle(resolver, keyword)) { From 20e4e20f31c609be24cd8a4f97957c797c2b38ce Mon Sep 17 00:00:00 2001 From: Ojas Atkar Date: Thu, 3 Apr 2025 14:46:18 -0700 Subject: [PATCH 3/3] fix(app-degree-pages): improving search relevancy --- .../services/degree-data-manager-service.js | 45 ++++++++++--------- .../degree-data-prop-resolver-service.jsx | 4 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js index 10c219da9b..72b9271199 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js +++ b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js @@ -50,24 +50,22 @@ function filterData({ if (!searchTerm) return true; const regex = new RegExp(searchTerm, "i"); const title = regex.test(resolver.getMajorDesc()); - if (title){ + if (title) { return true; } - else{ - return false; - } + + return false; }; const filterByKeywordDescription = (resolver, searchTerm) => { if (!searchTerm) return true; const regex = new RegExp(searchTerm, "i"); const description = regex.test(resolver.getFullDescription()); - if (description){ + if (description) { return true; } - else{ - return false; - } + + return false; }; const filterByBlacklist = resolver => @@ -104,26 +102,31 @@ function filterData({ ); }; - let filteredByTitle = []; - let filteredByDescription = []; - let newPrograms; + const filteredByTitle = []; + const filteredByDescription = []; - newPrograms = programs.filter(degree => { + const newPrograms = programs.filter(degree => { const resolver = degreeDataPropResolverService(degree); - if(filterByKeywordTitle(resolver, keyword)) { - if (applyFilters(degree)) { - filteredByTitle.push(degree); - } - return false; - } + const isFilteredByTitle = filterByKeywordTitle(resolver, keyword); + const isFilteredByDescription = filterByKeywordDescription( + resolver, + keyword + ); - if(filterByKeywordDescription(resolver, keyword)) { - if (applyFilters(degree)) { + if ( + (isFilteredByTitle || isFilteredByDescription) && + applyFilters(degree) + ) { + if (isFilteredByTitle) { + filteredByTitle.push(degree); + } else { filteredByDescription.push(degree); } - return false; + return true; } + + return false; }); return filteredByTitle.concat(filteredByDescription); diff --git a/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx b/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx index cb02ca216b..b392a5a125 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx +++ b/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx @@ -91,7 +91,6 @@ function degreeDataPropResolverService(row = {}) { /** @type {string} */ const gradRequirement2 = row["degreeRequirements"] || ""; return `${gradRequirement1}${gradRequirement2}`; - }, isOnline: () => row["asuOnlineAcadPlanUrl"], // Returns null if online url is not available // See getGeneralDegreeMajorMap for more info @@ -222,9 +221,8 @@ function degreeDataPropResolverService(row = {}) { const text = row["stemOptText"]; if (text && text !== "") { return "Yes"; - } else { - return "No"; } + return "No"; }, getSubPlnMajorMaps: () => { if (!row["subplans"] || !row["majorMapSubplans"]) return [];