diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 4264fbc1a..3baad9cc3 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -181,15 +181,14 @@ export const buildQuery = ( return null } - const param = 'implicit_field' - const alias = 'rank' + const param = `implicit_field_${parameters.length}` + const alias = `rank_${parameters.length}` selects.push({ column: `ts_rank_cd(library_item.search_tsv, websearch_to_tsquery('english', :${param}))`, alias, }) - // always sort by rank first - orders.unshift({ by: alias, order: SortOrder.DESCENDING }) + orders.push({ by: alias, order: SortOrder.DESCENDING }) return escapeQueryWithParameters( `websearch_to_tsquery('english', :${param}) @@ library_item.search_tsv`, @@ -532,6 +531,7 @@ export const buildQuery = ( } case 'use': case 'mode': + case 'event': // mode is ignored and used only by the frontend return null case 'readPosition': diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 167b80acf..196cd652f 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -7,6 +7,8 @@ export const parseSearchQuery = (query: string): LiqeQuery => { .replace('in:library', 'no:subscription') // compatibility with old search // wrap the value behind colon in quotes if it's not already .replace(/(\w+):("([^"]+)"|([^")\s]+))/g, '$1:"$3$4"') + // remove any quotes that are in the array value for example: label:"test","test2" -> label:"test,test2" + .replace(/","/g, ',') return parse(searchQuery) }