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

Wildcard-søgning i MySQL fuldtekstsøgning

Desværre kan du ikke gøre dette ved at bruge et MySQL fuldtekstindeks. Du kan ikke hente '*nited states' øjeblikkeligt fra indekset, fordi venstre tegn er den vigtigste del af indekset. Du kan dog søg 'United Sta*' .

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

MySQL's fuldtekst klarer sig bedst, når der søges i hele ord i sætninger - selv det kan til tider være kedeligt. Ellers vil jeg foreslå at bruge en ekstern fuldtekst-motor som Solr eller Sphinx . Jeg tror, ​​at Sphinx tillader præfiks- og suffiks-jokertegn, ikke sikker på de andre.

Du kan gå tilbage til MySQL's LIKE klausul, men igen, kører forespørgsler som LIKE '%nited states' eller LIKE '%nited Stat%' , vil også lide på ydeevnen, da den ikke kan bruge indekset på de første par tegn. 'United Sta%' og 'Unit%States' er okay, da indekset kan bruges mod den første flok kendte tegn.

En anden ret stor advarsel ved brug af MySQL's fuldtekstindeksering er stopordlisten og indstillinger for minimum ordlængde . For eksempel vil du på et delt hostingmiljø være begrænset til ord, der er større end eller lig med 4 tegn. Så det ville mislykkes at søge 'Goo' for at få 'Google'. Stopordslisten tillader også almindelige ord som 'og', 'måske' og 'udenfor' - faktisk er der 548 stopord tilsammen! Igen, hvis du ikke bruger delt hosting, er disse indstillinger relativt nemme at ændre, men hvis du gør det, vil du blive irriteret over nogle af standardindstillingerne.




  1. Hvordan logger jeg på og godkender til Postgresql efter en ny installation?

  2. Hvordan forespørger man efter XML-værdier og attributter fra tabel i SQL Server?

  3. 5 måder at returnere rækker, der indeholder små bogstaver i SQL Server

  4. Kan du opdele/eksplodere et felt i en MySQL-forespørgsel?