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

hvordan man bruger Fuzzy look up til at finde sætningen i SQL?

Dette er ikke et simpelt spørgsmål. Dit bedste bud er at bruge en eller anden form for fuldtekstsøgning . Fuldtekstsøgning kan konfigureres til at have stopord (ord, der er udeladt fra søgning - som ordet the ) og kan også have en minimumsgrænse for ordlængde (ord med mindre end visse tegn lange udelades også fra søgningen.

Men hvis du blot bruger

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

Så returnerer MySQL ikke kun posten med den værdi, du ledte efter, men de poster, der kun har nogle af ordene og i en anden rækkefølge. Den, du viste, vil sandsynligvis være en af ​​de højest rangerende, men der er ingen garanti for, at den bliver højest rangerende.

Du vil måske bruge Boolesk fuldtekstsøgning og sæt + foran til hvert søgeord for at tvinge MySQL til kun at returnere de poster, der har alle søgeordene til stede:

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

Men on skal enten være et stopord (det er på standard stipword-listerne) eller skal være kortere end den mindste ordlængde, så det skal udelades fra søgeudtrykket (du får ingen resultater tilbage):

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

Jeg ved, at dette kræver ændring af søgeudtrykket, men dette vil give dig de bedste resultater ved at bruge MySQL's indbyggede funktionalitet.

Alternativet er at bruge andre fuldtekst søgemaskiner, såsom sfinx for at udføre søgningen for dig.



  1. Klip streng efter første forekomst af et tegn

  2. Sådan opretter du ordenstal i PostgreSQL

  3. Oracle 9i, Oracle 10g og Oracle 11g Developer Suite Selvstudie til formularer og rapporter

  4. RPAD() Funktion i Oracle