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

Come posso implementare una semplice ricerca nel sito con php e mySQL?

Tutti suggeriscono la ricerca fulltext in MySQL, tuttavia dovresti essere consapevole di un ENORME avvertimento. Il motore di ricerca Fulltext è disponibile solo per il motore MyISAM (non InnoDB, che è il motore più comunemente utilizzato per la sua integrità referenziale e conformità ACID).

Quindi hai alcune opzioni:

1. L'approccio più semplice è delineato da Particle Tree . Puoi effettivamente ottenere ricerche classificate da SQL puro (nessun testo completo, niente di niente). La query SQL seguente cercherà in una tabella e classificherà i risultati in base al numero di occorrenze di una stringa nei campi di ricerca:

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

ha modificato il loro esempio per fornire un po' più di chiarezza

Le variazioni sulla query SQL di cui sopra, l'aggiunta di istruzioni WHERE (WHERE p.body LIKE '%whatever%you%want'), ecc. probabilmente ti daranno esattamente ciò di cui hai bisogno.

2. È possibile modificare lo schema del database per supportare il testo completo. Spesso cosa viene fatto per mantenere l'integrità referenziale, la conformità ACID e la velocità di InnoDB senza dover installare plug-in come Sphinx Fulltext Search Engine per MySQL è dividere i dati delle quotazioni nella propria tabella. Fondamentalmente avresti una tabella Quotes che è una tabella InnoDB che, invece di avere il tuo campo TEXT "data", hai un riferimento "quote_data_id" che punta all'ID su una tabella Quote_Data che è una tabella MyISAM. Puoi fare il tuo testo completo sulla tabella MyISAM, unire gli ID restituiti con le tue tabelle InnoDB e voilà hai i tuoi risultati.

3. Installa Sfinge . Buona fortuna con questo.

Dato quello che hai descritto, lo farei ALTAMENTE ti consiglio di adottare il primo approccio che ho presentato poiché hai un semplice sito basato su database. La prima soluzione è semplice, porta a termine il lavoro rapidamente. Lucene sarà una cagna da configurare soprattutto se si desidera integrarlo con il database poiché Lucene è progettato principalmente per indicizzare file non database. La ricerca su sito personalizzata di Google fa perdere al tuo sito un sacco di reputazione (ti fa sembrare amatoriale e hackerato) e molto probabilmente il fulltext di MySQL ti farà alterare lo schema del tuo database.