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

Hvordan ville jeg implementere en simpel webstedssøgning med php og mySQL?

Alle foreslår MySQL fuldtekstsøgning, men du skal være opmærksom på en KÆMPE advarsel. Fuldtekst-søgemaskinen er kun tilgængelig for MyISAM-motoren (ikke InnoDB, som er den mest brugte motor på grund af dens referenceintegritet og ACID-overholdelse).

Så du har et par muligheder:

1. Den enkleste tilgang er skitseret af Partikeltræ . Du kan faktisk få rangeret søgninger ud fra ren SQL (ingen fuldtekst, ingen ingenting). SQL-forespørgslen nedenfor vil søge i en tabel og rangere resultater baseret på antallet af forekomster af en streng i søgefelterne:

SELECT SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) + ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6)) AS Occurrences FROM posts AS p GROUP BY p.id ORDER BY Occurrences DESC

redigerede deres eksempel for at give lidt mere klarhed

Variationer på ovenstående SQL-forespørgsel, tilføjelse af WHERE-sætninger (WHERE p.body LIKE '%whatever%you%want') osv. vil sandsynligvis give dig præcis, hvad du har brug for.

2. Du kan ændre dit databaseskema til at understøtte fuldtekst. Ofte hvad der gøres for at bevare InnoDBs referenceintegritet, ACID-overensstemmelse og hastighed uden at skulle installere plugins som Sphinx Fulltext Search Engine for MySQL er at opdele tilbudsdataene i sin egen tabel. Grundlæggende ville du have en tabel Quotes, der er en InnoDB-tabel, der i stedet for at have dit TEXT-felt "data" har en reference "quote_data_id", som peger på ID'et på en Quote_Data-tabel, som er en MyISAM-tabel. Du kan lave din fuldtekst på MyISAM-tabellen, slutte dig til de ID'er, der returneres med dine InnoDB-tabeller, og voila, du har dine resultater.

3. Installer Sphinx . Held og lykke med denne.

I betragtning af det, du beskrev, ville jeg MEGET anbefaler, at du tager den første tilgang, jeg præsenterede, da du har et simpelt databasedrevet websted. Den 1. løsning er enkel, får jobbet gjort hurtigt. Lucene vil være en tøs at konfigurere, især hvis du ønsker at integrere den med databasen, da Lucene hovedsageligt er designet til at indeksere filer og ikke databaser. Googles tilpassede webstedssøgning får bare dit websted til at miste tonsvis af omdømme (får dig til at se amatøragtig og hacket ud), og MySQL fuldtekst vil højst sandsynligt få dig til at ændre dit databaseskema.



  1. MySQL Cloud Backup og gendannelsesscenarier ved hjælp af Microsoft Azure

  2. Sammenlign kun dag og måned med datofelt i mysql

  3. Inkrementel statistik indsamling i 11g

  4. Hvordan får jeg SQLAlchemy til korrekt at indsætte en unicode-ellipsis i en mySQL-tabel?