Mysql
 sql >> Database >  >> RDS >> Mysql

come usare la ricerca Fuzzy per trovare la frase in SQL?

Questa non è una domanda semplice. La soluzione migliore è utilizzare un tipo di ricerca fulltext . La ricerca fulltext può essere configurata per avere stopword (parole che vengono omesse dalla ricerca, come la parola the ) e può avere anche un limite minimo di lunghezza delle parole (anche le parole con una lunghezza inferiore a determinati caratteri vengono omesse dalla ricerca.

Tuttavia, se usi semplicemente

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');

Quindi MySQL restituirà non solo il record con il valore che stavi cercando, ma i record che contengono solo alcune parole e in ordine diverso. Quello che hai mostrato sarà probabilmente uno di quelli con il punteggio più alto, ma non vi è alcuna garanzia che sarà uno con il punteggio più alto.

Potresti voler usare Ricerca booleana fulltext e anteporre + a ogni parola di ricerca per forzare MySQL a restituire solo quei record che hanno tutte le parole di ricerca presenti:

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);

Ma, on dovrebbe essere una stopword (è negli elenchi di stipword predefiniti) o dovrebbe essere più breve della lunghezza minima della parola, quindi dovrebbe essere omesso dall'espressione di ricerca (non otterrai alcun risultato):

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);

So che ciò richiede un'alterazione dell'espressione di ricerca, tuttavia ciò ti consentirà di ottenere i migliori risultati utilizzando la funzionalità integrata di MySQL.

L'alternativa è utilizzare altri motori di ricerca fulltext, come sfinge per eseguire la ricerca per te.