sql >> Database >  >> RDS >> Mysql

Hoe zou ik een eenvoudige sitezoekopdracht uitvoeren met php en mySQL?

Iedereen suggereert MySQL fulltext zoeken, maar u moet zich bewust zijn van een ENORME waarschuwing. De Fulltext-zoekmachine is alleen beschikbaar voor de MyISAM-engine (niet InnoDB, de meest gebruikte engine vanwege de referentiële integriteit en ACID-compliance).

Je hebt dus een paar opties:

1. De eenvoudigste aanpak wordt beschreven door Particle Tree . U kunt daadwerkelijk gerangschikte zoekopdrachten krijgen van pure SQL (geen volledige tekst, niets). De onderstaande SQL-query doorzoekt een tabel en rangschikt de resultaten op basis van het aantal keren dat een tekenreeks in de zoekvelden voorkomt:

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

hun voorbeeld aangepast om wat meer duidelijkheid te geven

Variaties op de bovenstaande SQL-query, het toevoegen van WHERE-instructies (WHERE p.body LIKE '%whatever%you%want'), enz. zullen u waarschijnlijk precies geven wat u nodig heeft.

2. U kunt uw databaseschema wijzigen om volledige tekst te ondersteunen. Wat wordt er vaak gedaan om de InnoDB-referentiële integriteit, ACID-compliance en snelheid te behouden zonder plug-ins te hoeven installeren zoals Sphinx Fulltext Search Engine voor MySQL is om de offertegegevens in een eigen tabel te splitsen. In principe zou je een tabel Quotes hebben die een InnoDB-tabel is die, in plaats van je TEXT-veld "data" te hebben, een referentie "quote_data_id" hebt die verwijst naar de ID op een Quote_Data-tabel die een MyISAM-tabel is. U kunt uw volledige tekst op de MyISAM-tabel doen, de ID's toevoegen die zijn geretourneerd met uw InnoDB-tabellen en voila, u heeft uw resultaten.

3. Installeer Sphinx . Veel succes met deze.

Gezien wat je hebt beschreven, zou ik HOOGSTE raad u aan de eerste benadering te volgen die ik heb gepresenteerd, omdat u een eenvoudige databasegestuurde site heeft. De eerste oplossing is eenvoudig, de klus is snel geklaard. Lucene zal een bitch zijn om in te stellen, vooral als je het met de database wilt integreren, aangezien Lucene voornamelijk is ontworpen om bestanden te indexeren en niet om databases. Google Custom Site Search zorgt ervoor dat uw site tonnen aan reputatie verliest (waardoor u er amateuristisch en gehackt uitziet), en MySQL fulltext zal er hoogstwaarschijnlijk toe leiden dat u uw databaseschema wijzigt.



  1. Moet MEDIUMINT worden vermeden in MySQL?

  2. Dynamische cursor in opgeslagen procedure

  3. standaard een kolom met lege tekenreeks

  4. Waarom is het resultaat van de rijen met explain niet gelijk aan count()?