From 94d1d852e1b23a32fda665ac23ed15582c81ff64 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Fri, 21 May 2021 09:41:55 +0200 Subject: [PATCH] update lunr search query filters Signed-off-by: Emma Indal Signed-off-by: Eric Peterson --- .../src/engines/LunrSearchEngine.ts | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index bbe7eb7905..77bba3ff6c 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -47,7 +47,27 @@ export class LunrSearchEngine implements SearchEngine { const lunrTerm = term ? `+${term}` : ''; if (filters) { lunrQueryFilters = Object.entries(filters) - .map(([key, value]) => ` +${key}:${value}`) + .map(([field, value]) => { + // Require that the given field has the given value (with +). + if (['string', 'number', 'boolean'].includes(typeof value)) { + return ` +${field}:${value}`; + } + + // Illustrate how multi-value filters could work. + if (Array.isArray(value)) { + // But warn that Lurn supports this poorly. + this.logger.warn( + `Non-scalar filter value used for field ${field}. Consider using a different Search Engine for better results.`, + ); + return ` ${value.map(v => { + return `${field}:${v}`; + })}`; + } + + // Log a warning or something about unknown filter value + this.logger.warn(`Unknown filter type used on field ${field}`); + return ''; + }) .join(''); }