Claudiogarau.it :: Tutorials & Scripts, PHP, Linux and more.

Home ~ Php :: Ricerche FULL TEXT e applicazioni pratiche :: Indice Php

Ricerche FULL TEXT e applicazioni pratiche

Categoria: Php Inserito il: 05-09-2006 Stampa (4441 click)

Per presentare un esmpio pratico sull'impiego delle ricerche FULL TEXT inseriremo del contenuto all'interno della nostra tabella "news":

INSERT INTO news(id,data,autore,titolo,descrizione) 
VALUES (
'',
'2006-06-21',
'Cicerone',
'Lorem ipsum' , 
'Nunc ultricies pretium orci. Integer tortor.
Nam varius quam. Curabitur quis felis nec 
mauris rhoncus fringilla. Fusce sed magna 
eu neque imperdiet gravida.'
) ;

Quello proposto è solo un esempio, naturalmente il lettore dovrà sulla base di questo aggiungere più contenuti alla tabella in modo da rendere possibili i confronti e la generazione dei livelli di corrispondenza.

Di seguito riportiamo il codice necessario per operare all'interno dei nostri dati una semplice ricerca basata su una chiave:
SELECT `titolo`, MATCH (`titolo`,`descrizione`) 
AGAINST ('tortor') AS new_tb
FROM news ORDER BY `new_tb` DESC
Lo scopo dell'istruzione appena descritta, è in pratica quello di ricercare all'interno dei contenuti indicizzati la chiave "tortor" e di visualizzare in output i titoli e gli SCORE ottenuti. Da notare l'utilizzo del costrutto AS che ci permette di creare un output virtuale chimato "new_tb" in sostituzione del meno leggile "MATCH (`titolo`,`descrizione`) AGAINST ('tortor')" che poi non è altro se non l'elenco degli SCORE.

Passiamo ora ad un esempio pratico di ricerca FULL TEXT più raffinata in cui vengono filtrati i risultati:
SELECT titolo, MATCH (`titolo`,`descrizione`) 
AGAINST ('tortor') AS new_tb
FROM news
WHERE MATCH (`titolo`,`descrizione`) AGAINST ('tortor')
ORDER BY new_tb DESC
L'istruzione descritta sopra contiene due passaggi fondamentali: innanzitutto viene operata un SELECT dei record corrispondenti al campo "titolo" sulla base di un confronto (AGAINST) col parametro chiave di input; in secondo luogo si specifica che il confronto dovrà riguardare soltanto i record dei campi indicizzati restituisce un risultato diverso da FALSE. Per cui in output avremo una "classifica" contenente soltanto i record dotati di uno SCORE diverso da zero.

Per filtrare ulteriormente gli esiti delle nostre ricerche potremo anche utilizzare più parametri e operare confronti in senso booleano:
SELECT titolo, MATCH (`titolo`,`descrizione`) 
AGAINST ('tortor magna' IN BOOLEAN MODE) AS new_tb
FROM news 
WHERE MATCH (`titolo`,`descrizione`) 
AGAINST ('tortor magna' IN BOOLEAN MODE)
ORDER BY new_tb DESC
In questo caso, abbiamo deciso di operare una ricerca limitata ai record in cui vengono associate le stringhe "tortor" e "magna". Da notare l'utilizzo dell'istruzione IN BOOLEAN MODE con il quale indichiamo che la ricerca deve esse operata in termini logici (0/1).

Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.

Cerca nel sito
Per sito
Sviluppatore di applicazioni Web con competenze evolute nella progettazione delle basi di dati, autore per alcune delle più importanti testate on line dedicate alla manualistica tecnica (HTML.it, MrWebmaster.it, Edit) e consulente per l'e-learning.
Tutte le categorie
Tutorial Random
Le novità di MySQL 5: I Cursors e le Transactions
I Cursors rappresentano dei puntatori diretti ai recordset di determinate interrogazioni; attraverso di essi possiamo accedere ai recordset e assegnare... Leggi l'articolo
Corsi online per sviluppatori
Corsi per Webmaster, Web Designer, Programmatori, Grafici e Sistemisti