La ricerca nel catalogo non si rompe più con un operatore finale
La PR #1492 unita corregge l'errore MySQL 1064 quando la ricerca di un visitatore termina con un operatore, e applica finalmente il limite di parole e la lunghezza minima a ogni parola, su ogni database.
Una pull request unita corregge un bug di vecchia data nella ricerca del catalogo: l’errore MySQL 1064 con un operatore finale.
La richiesta di suggerimento della ricerca invia il termine mentre il visitatore sta ancora
digitando, quindi una ricerca come test - arrivava al database con un - finale isolato.
In modalità boolean di MySQL è sintassi non valida e la query falliva con l’errore 1064.
Cosa è cambiato
prepareTerms() copiava ogni operatore o parentesi isolato direttamente nella query in
modalità boolean, per cui test - produceva "test" -. Il supporto agli operatori non era
mai stato davvero utilizzabile: un operatore funzionava solo come parola separata (-brush
veniva trattato come frase), test* non troncava mai, e PostgreSQL, SQLite e la ricerca
LIKE ignoravano del tutto gli operatori.
Ora ogni parola viene racchiusa tra virgolette doppie e qualsiasi parola composta solo da
caratteri operatore o parentesi viene scartata. Il risultato è prevedibile: test - brush
trova i prodotti che corrispondono a test o brush, e non esclude più in silenzio
brush. Su SQLite le stesse parole vengono scartate, quindi test - non produce più un
valore LIKE che non trova nulla, e quel valore non inizia più con uno spazio indesiderato.
Sono stati resi coerenti anche due limiti collegati:
max_query_wordslimitava solo i termini, non le parole legate al parametro:query, quindi la query full-text non aveva alcun limite di parole. Ora ce l’ha su ogni database.min_query_lengthsi applicava solo all’intero testo di ricerca. Ora ogni parola più corta del minimo viene scartata, su ogni database e sia per la query full-text sia per le condizioniLIKE. Una ricercaLIKErimasta senza parole non trova alcun prodotto, e l’avviso “Maximum words count” conta le stesse parole che la ricerca usa davvero.
Una ricerca fatta solo di caratteri operatore come --- su SQLite corrispondeva a ogni
prodotto; ora non corrisponde a nulla, come su MySQL.
Nota di redazione.Testo preparato con l'aiuto dell'AI e verificato sulla fonte prima della pubblicazione. Può contenere errori: se ne trovi uno, segnalalo.Leggi il Manifesto
Fonte: MahoCommerce/maho#1492
Il tuo negozio vende ancora?
Raccontaci da dove parti: ti rispondiamo con una prima valutazione, senza impegno.
Chiedi l'analisi del negozio