diff --git a/server/package.json b/server/package.json index 6670ddf..3646dd9 100644 --- a/server/package.json +++ b/server/package.json @@ -37,6 +37,7 @@ "commander": "9.2.0", "csv-parse": "5.0.4", "deep-equal-in-any-order": "2.0.6", + "diacritics": "1.3.0", "dotenv": "16.0.0", "env-var": "7.1.1", "express": "4.18.1", diff --git a/server/src/cli.ts b/server/src/cli.ts index 0ea029d..b4a7bf0 100644 --- a/server/src/cli.ts +++ b/server/src/cli.ts @@ -26,7 +26,7 @@ import { importFormationSimilaire } from "./jobs/formations/importFormationSimil import { importFichesFormationsTmp } from "./jobs/formations/importFichesFormationsTmp"; import { importIndicateurPoursuiteRegionale } from "./jobs/exposition/importIndicateurPoursuiteRegionale"; import { importFamillesMetiers } from "./jobs/formations/importFamillesMetiers"; -import { createSearchIndex } from "./services/search/search"; +import { createSearchIndex } from "./services/formation/search"; const cli = new Command(); diff --git a/server/src/queries/getFormations.ts b/server/src/queries/getFormations.ts index 2273f6c..335795a 100644 --- a/server/src/queries/getFormations.ts +++ b/server/src/queries/getFormations.ts @@ -10,7 +10,7 @@ import { DB, Etablissement, Formation, FormationEtablissement } from "#src/commo import { jsonBuildObject } from "kysely/helpers/postgres"; import FormationRepository from "#src/common/repositories/formation"; import config from "#src/config"; -import { getSearch } from "#src/services/search/search.js"; +import { search } from "#src/services/formation/search.js"; const logger = getLoggerWithContext("query"); @@ -250,18 +250,7 @@ async function getFiltersId(formation) { } // Fuse search - const search = await getSearch(); - if (!search) { - return null; - } - - const searchResult = search.search<{ id: string }>( - `${formation - .split(" ") - .map((f) => `${f}`) - .join(" ")}` - ); - return searchResult.map((r) => r.item.id); + return await search(formation); } export async function getFormationsSQL( diff --git a/server/src/services/search/search.ts b/server/src/services/formation/search.ts similarity index 85% rename from server/src/services/search/search.ts rename to server/src/services/formation/search.ts index 3d65f87..9e3422c 100644 --- a/server/src/services/search/search.ts +++ b/server/src/services/formation/search.ts @@ -1,4 +1,5 @@ import { oleoduc, writeData, transformData } from "oleoduc"; +import diacritics from "diacritics"; import { getLoggerWithContext } from "#src/common/logger.js"; import FormationRepository from "#src/common/repositories/formation"; import FormationEtablissementRepository from "#src/common/repositories/formationEtablissement"; @@ -43,8 +44,10 @@ export async function createSearchIndex(indexDir = config.formation.files.fuseIn logger.info(`Ajout de ${formationEtablissement.id}`); formations.push({ id: formationEtablissement.id, - libelle: formation.libelle, - libelles: uniq([formation.libelle, ...filteredFamilleMetier.map((f) => f.libelle)]), + libelle: diacritics.remove(formation.libelle), + libelles: uniq([formation.libelle, ...filteredFamilleMetier.map((f) => f.libelle)]).map((v) => + diacritics.remove(v) + ), }); }) ); @@ -99,3 +102,19 @@ export async function getSearch(): Promise> { } return fuse; } + +export async function search(input: string): Promise { + // Fuse search + const search = await getSearch(); + if (!search) { + return null; + } + + const searchResult = search.search<{ id: string }>( + `${input + .split(" ") + .map((f) => `${diacritics.remove(f)}`) + .join(" ")}` + ); + return searchResult.map((r) => r.item.id); +} diff --git a/yarn.lock b/yarn.lock index d59e958..50b66b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6477,6 +6477,11 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" +diacritics@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" + integrity sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA== + diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"