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

Er fuldtekstsøgning svaret?

Problemet med søgningen af ​​typen '%keyword%' er, at der ikke er nogen måde at søge effektivt på det i en almindelig tabel, selvom du opretter et indeks på den kolonne. Tænk på, hvordan du ville se den streng op i telefonbogen. Der er faktisk ingen måde at optimere det på - du skal scanne hele telefonbogen - og det er det, MySQL gør, en fuld tabelscanning.

Hvis du ændrer den søgning til 'søgeord%' og bruger et indeks, kan du få meget hurtig søgning. Det lyder dog som om, at det ikke er det, du ønsker.

Så med det i tankerne har jeg brugt en del fuldtekstindeksering/søgning, og her er et par fordele og ulemper:

Fordele

  • Meget hurtigt
  • Returnerer resultater sorteret efter relevans (som standard, selvom du kan bruge enhver sortering)
  • Stopord kan bruges.

Udemper

  • Fungerer kun med MyISAM-tabeller
  • Ord, der er for korte, ignoreres (standard minimum er 4 bogstaver)
  • Kræver anden SQL in where-klausul, så du bliver nødt til at ændre eksisterende forespørgsler.
  • Skal ikke matche delstrenge (f.eks. matcher 'ord' ikke 'søgeord', kun 'ord')

Her er noget god dokumentation om fuldtekstsøgning .

En anden mulighed er at bruge et søgesystem såsom Sphinx . Det kan være ekstremt hurtigt og fleksibelt. Det er optimeret til søgning og integreres godt med MySQL.



  1. Hvordan påvirker søgestien identifikatoropløsning og det aktuelle skema

  2. Sådan opretter du forbindelse til WSL mysql fra Host Windows

  3. RODBC-forespørgsel returnerer ikke data

  4. Sådan omdøbes en JSON-nøgle i SQL Server (T-SQL)