sql >> Database >  >> RDS >> Mysql

Is full-text zoeken het antwoord?

Het probleem met zoeken van het type '%keyword%' is dat er geen manier is om er efficiënt naar te zoeken in een gewone tabel, zelfs als u een index op die kolom maakt. Bedenk hoe je die string in het telefoonboek zou opzoeken. Er is eigenlijk geen manier om het te optimaliseren - je moet het hele telefoonboek scannen - en dat is wat MySQL doet, een volledige tabelscan.

Als u die zoekopdracht wijzigt in 'keyword%' en een index gebruikt, kunt u heel snel zoeken. Het klinkt echter alsof dit niet is wat je wilt.

Dus met dat in gedachten heb ik nogal wat fulltext indexering/zoeken gebruikt, en hier zijn een paar voor- en nadelen:

Pluspunten

  • Heel snel
  • Retourneert resultaten gesorteerd op relevantie (standaard, hoewel u elke sortering kunt gebruiken)
  • Stopwoorden kunnen worden gebruikt.

Nadelen

  • Werkt alleen met MyISAM-tabellen
  • Woorden die te kort zijn, worden genegeerd (standaard minimum is 4 letters)
  • Vereist een andere SQL in de where-clausule, dus u moet bestaande query's aanpassen.
  • Komt niet overeen met gedeeltelijke tekenreeksen (bijvoorbeeld 'woord' komt niet overeen met 'zoekwoord', alleen 'woord')

Hier is wat goede documentatie over zoeken in volledige tekst .

Een andere optie is om een ​​zoeksysteem te gebruiken zoals Sphinx . Het kan extreem snel en flexibel zijn. Het is geoptimaliseerd voor zoeken en integreert goed met MySQL.



  1. Selecteer de nieuwste MySQL-gegevens maar uniek resort

  2. Een tabelruimte maken in postgresql

  3. verklaringen voorbereid met behulp van psycopg

  4. PHP Mysql-zoekopdracht