Home » Uncategorized » Ricerca full-text in MySQL

Ricerca full-text in MySQL

Introduzione al metodo di ricerca full-text in database MySQL

La differenza
Noi ci concentreremo appunto sull’ultimo metodo di ricerca. Le differenze tra i vari metodi sono numerose, ma per quale motivo usare una ricerca full-text?
La ricerca full-text possiede numerosi vantaggi: per prima cosa è migliore a livello di prestazioni (consente ricerche più veloci), e poi consente ricerche molto precise ordinando anche i risultati in base al grado di attinenza con la ricerca, in parole povere pesa i risultati. Per comprendere meglio l’utilità della ricerca full-text proviamo a pensare a Google. Quando si effettua una ricerca con Google i risultati vengono mostrati in base al grado di attinenza con la parola cercata. Questo è proprio quello che la ricerca full-text permette di fare.

La ricerca full-text si basa su indici, il che significa che la ricerca viene svolta duplicemente: innanzitutto MySQL ricerca il termine nell’indice e poi esegue la ricerca vera e propria. Per chiarire questo concetto provate a pensare di dover cercare in uno stradario di una qualche città “via Milano 54”. Una ricerca condotta in modo classico inizierebbe a sfogliare tutte le carte dello stradario analizzandole fino a trovare la via desiderata. Una ricerca full-text invece per prima cosa va a consultare l’indice. Qui trova la via desiderata corredata dalle informazioni per localizzarla sulle carte. Con tali informazioni estrae poi la carta esatta. Si capisce bene che in questo modo la ricerca è molto più veloce ed efficiente. E’ stato verificato che su un database di 100MB una ricerca di tipo full-text si dimostra circa 8/10 volte più veloce di una ricerca libero (con “LIKE”).


Precisazioni iniziali
Bisogna precisare fin dall’inizio che la ricerca full-text è possibile solo su campi di testo, quindi CHAR, VARCHAR, TEXT ecc… Inoltre è possibile solo a condizione che sia stato creato un full-text index. L’indice full-text può essere creato al momento della creazione della tabella o anche su una tabella esistente. Per aggiungere l’indice ad una tabella esistente si può fare:

[sourcecode language=’php’]
ALTER TABLE nomeTabella ADD FULLTEXT(primoCampo, secondoCampo, terzoCampo, …);
[/sourcecode]

Se invece si deve creare una nuova tabella l’indice si può creare ugualmente aggiungendo FULLTEXT:

[sourcecode language=’php’]
CREATE TABLE nomeTabella (

primoCampo INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

secondoCampo VARCHAR(200),

terzoCampo TEXT,

FULLTEXT (secondoCampo, terzoCampo)

);
[/sourcecode]

Ovviamente dentro FULLTEXT() bisogna inserire tutti i campi su cui creare l’indice full-text separati da una virgola “,”.
E’ doveroso ricordare inoltre che la ricerca full-text è possibile solo dalla versione 3.23.23 e successive di MySQL.


Query di ricerca
Vediamo come usare la ricerca full-text. Se ad esempio vogliamo cercare la parola “milano” nei campi “indirizzo”, “nome”, “descrizione” della tabella “locali” del nostro database, potremmo usare la seguente query:

[sourcecode language=’php’]
SELECT * FROM locali WHERE MATCH(indirizzo, nome, descrizione) AGAINST(‘milano’)
[/sourcecode]

La sequenza di comandi MATCH() … AGAINST() restituisce il valore di attinenza del risultato con il testo cercato (numero in floating-point compreso tra 0 e 10). Quindi, considerando che la clausola WHERE per essere verificata deve avere valore booleano “true”, se il risultato in questione ha attinenza 0 su 10, ovvero non ha nessuna attinenza, viene scartato. Vengono quindi selezionati solo quei risultati con attinenza maggiore di 0. Questa query tuttavia non ha grande utilità, in quanto non ordina i risultati secondo la loro attinenza, nè tantomeno restituisce il valore di essa. Potremmo modificare la query in modo che ordini i risultati per attinenza e restituisca il valore della stessa riga per riga:

[sourcecode language=’php’]
SELECT *, MATCH(indirizzo, nome, descrizione) AGAINST(‘milano’) AS attinenza FROM locali WHERE MATCH(indirizzo, nome, descrizione) AGAINST(‘milano’) ORDER BY attinenza DESC
[/sourcecode]

In questo modo vengono restituiti tutti i campi e in più anche il valore dell’attinenza del risultato rispetto alla parola “milano”, e le righe vengono ordinate da quella con più attinenza a quella che ne ha meno.

Possiamo anche fare la ricerca di tutti quei risultati che hanno parole che iniziano o terminano per “milano”. Ciò si ottiene con il carattere jolly “*”, che indica qualsiasi lettera. Quindi:

[sourcecode language=’php’]
AGAINST(“milano*”) // cerca tutti i record con parole che iniziano per “milano”

AGAINST(“*milano”) // cerca tutti i record con parole che terminano per “milano”
[/sourcecode]

Ricerca di concetti: il boolean mode
A partire dalla versione 4.0.1 di MySQL e successive è possibile combinare alla ricerca full-text il boolean mode: in parole povere è possibile effettuare ricerche con operatori booleani come si può fare con i motori di ricerca.

Facciamo un esempio pratico: se volessimo fare una ricerca come la precedente, cercando per tutti i risultati in cui compaia la parola “milano” ma contemporaneamente non compaia la parola “roma”, potremmo usare una query di questo tipo:

[sourcecode language=’php’]
SELECT *, MATCH(indirizzo, nome, descrizione) AGAINST(‘+milano -roma’ IN BOOLEAN MODE) AS attinenza FROM locali WHERE MATCH(indirizzo, nome, descrizione) AGAINST(‘+milano -roma’ IN BOOLEAN MODE) ORDER BY attinenza DESC
[/sourcecode]

Come si può notare è stata aggiunta la clausola “IN BOOLEAN MODE” all’interno di AGAINST e sono stati aggiunti anche gli operatori booleani + e – all’interno del testo da cercare. Vediamo quali sono alcuni dei casi possibili per il testo di ricerca:

  • ‘milano roma’: deve essere presente uno dei due termini
  • ‘+milano +roma’: devono essere presenti entrambi i termini
  • ‘+milano roma’: deve essere presente “milano” ed eventualmente “roma”.
  • ‘+milano -roma’: deve essere presente “milano” ma non “roma”
  • ‘+milano +(<roma >venezia)’: devono essere presenti o “milano” e “roma” o “milano” e “venezia”, ma i records con “milano” e “venezia” hanno rilevanza maggiore. (“<” indica minore rilevanza, “>” indica maggiore rilevanza)
  • ‘”milano roma”‘: deve essere presente l’esatta sequenza “milano roma”.

Via : codicefacile

Panoramica privacy

Con il presente documento, ai sensi degli artt. 13 e 122 del D. Lgs. 196/2003 (“codice privacy”), nonché in base a quanto previsto dal Provvedimento generale del Garante privacy dell’8 maggio 2014, ISayBlog titolare del trattamento, fornisce gli utenti del sito alcune informazioni relative ai cookie utilizzati.

Cosa sono

Un “cookie” è un piccolo file di testo creato sul computer dell’utente nel momento in cui questo accede ad un determinato sito, con lo scopo di immagazzinare informazioni sulla visita, come la lingua preferita e altre impostazioni. Ciò può facilitare la visita successiva e aumentare l’utilità del sito. Per questo motivo i cookie svolgono un ruolo importante.

I cookie sono inviati al browser dell’utente (Internet Explorer, Mozilla Firefox, Google Chrome, ecc.) dal sito web visitato, in particolare dal server web (ovvero il computer sul quale è in esecuzione il sito web). Nel corso della navigazione l’utente potrebbe ricevere anche cookie di siti diversi (di “terze parti”), impostati direttamente da gestori di detti siti web e utilizzati per le finalità e secondo le modalità da questi definiti.

Tipologie di cookie utilizzati in questo sito web

Cookie del Titolare

Il sito utilizza solo cookie tecnici, rispetto ai quali, ai sensi dell’art. 122 del codice privacy e del Provvedimento del Garante dell’8 maggio 2014, non è richiesto alcun consenso da parte dell’interessato. Più precisamente il sito utilizza:

– cookie tecnici strettamente necessari per consentire la navigazione da parte dell’utente, di seguito indicati nel dettaglio

NOME COOKIE

SCADENZA

INFORMAZIONI

PHPSESSID

Al termine della sessione di navigazione

http://cookiepedia.co.uk/cookies/PHPSESSID

In assenza di tali cookie, il sito web non potrebbe funzionare correttamente.

– cookie tecnici che agevolano la navigazione dell’utente, di seguito indicati nel dettaglio

NOME COOKIE

SCADENZA

INFORMAZIONI

viewed_cookie_policy
(evita che l’informativa breve contenuta nel banner ricompaia nel caso di accettazione)

1 anno

http://cookiepedia.co.uk/cookies/viewed_cookie_policy

gads

1 anno

http://cookiepedia.co.uk/cookies/__gads

Cookie di terze parti

Attraverso il sito https://www.politicalive.com/ sono installati alcuni cookie di terze parti, anche profilanti, che si attivano cliccando “ok” sul banner.

Si riportano nel dettaglio i singoli cookie di terze parti, nonché i link attraverso i quali l’utente può ricevere maggiori informazioni e richiedere la disattivazione dei cookie.

Nielsen: https://priv-policy.imrworldwide.com/priv/browser/it/it/optout.htm

Triboo: https://cookie-siti-in-concessione.triboomedia.it/

Google Analytics

Il Sito utilizza Google Analytics. Si tratta di un servizio di analisi web fornito da Google Inc. (“Google”) che utilizza dei cookie che vengono depositati sul computer dell’utente per consentire analisi statistiche in forma aggregata in ordine all’utilizzo del sito web visitato.

I Dati generati da Google Analytics sono conservati da Google così come indicato nella Informativa reperibile al seguente link: https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage

Per consultare l’informativa privacy della società Google Inc., titolare autonomo del trattamento dei dati relativi al servizio Google Analytics, si rinvia al sito internet http://www.google.com/intl/en/analytics/privacyoverview.html

Al seguente link https://tools.google.com/dlpage/gaoptout è inoltre reso disponibile da Google il componente aggiuntivo del browser per la disattivazione di Google Analytics.

Monitoraggio conversioni di Google AdWords (Google Inc.)

E’ un servizio di statistiche fornito da Google Inc. che collega le azioni compiute dagli utenti di questo sito ai dati provenienti dal network di annunci Google AdWords.

Dati personali raccolti: cookie e dati di utilizzo.

Per maggiori informazioni: Privacy Policy

Pubblicità

Questi servizi consentono di utilizzare i dati dell’utente per finalità di comunicazione commerciale in diverse forme pubblicitarie, quali il banner, anche in relazione agli interessi dell’utente e potrebbero utilizzare Cookie per identificare l’utente al fine di visualizzare annunci pubblicitari personalizzati in base agli interessi e al comportamento dell’utente stesso, rilevati anche al di fuori di questo sito.

Per avere maggiori informazioni in merito, ti suggeriamo di verificare le informative privacy dei rispettivi servizi.

Social Buttons

I Social buttons sono quei particolari “pulsanti” presenti sul sito che raffigurano le icone di social network (esempio, Facebook e Twitter) e consentono agli utenti che stanno navigando di interagire con un “click” direttamente con i social network.

I social buttons utilizzati dal sito nella pagina “Contatti” e nel footer della pagina, nell’area dedicata alla pubblicazione dei dati societari, sono dei link che rinviano agli account del Titolare sui social network raffigurati. Tramite l’utilizzo di tali pulsanti non sono pertanto installati cookie di terze parti.

I social buttons utilizzati invece nella pagina “Blog” consentono al social network cui l’icona si riferisce di acquisisce i dati relativi alla visita. Tramite l’utilizzo di tali pulsanti sono pertanto installati cookie di terze parti, anche profilanti. Il sito non condivide però alcuna informazione di navigazione o dato dell’utente acquisiti attraverso il proprio sito con i social network accessibili grazie ai Social buttons.

Si riportano i link ove l’utente può prendere visione dell’informativa privacy relativa alla gestione dei dati da parte dei Social cui i pulsanti rinviano:

https://support.twitter.com/articles/20170519-uso-dei-cookie-e-di-altre-tecnologie-simili-da-parte-di-twitter

https://www.facebook.com/help/cookies

https://www.linkedin.com/legal/cookie_policy

Modalità del trattamento

Il trattamento viene effettuato con strumenti automatizzati dal Titolare. Non viene effettuata alcuna diffusione o comunicazione.

Conferimento dei dati

Fatta eccezione per i cookie tecnici, il conferimento dei dati è rimesso alla volontà dell’interessato che decida di navigare sul sito dopo aver preso visione dell’informativa breve contenuta nell’apposito banner e/o di usufruire dei servizi che richiedano l’installazione di cookie (così per la condivisione dei contenuti tramite Add This).
L’interessato può evitare l’installazione dei cookie mantenendo il banner (Astenendosi dal chiuderlo cliccando sul tasto “OK”) nonché attraverso apposite funzioni disponibili sul proprio browser.

Disabilitazione dei cookie

Fermo restando quanto sopra indicato in ordine ai cookie strettamente necessari alla navigazione, l’utente può eliminare gli altri cookie attraverso la funzionalità a tal fine messa a disposizione dal Titolare tramite la presente informativa oppure direttamente tramite il proprio browser.

Ciascun browser presenta procedure diverse per la gestione delle impostazioni. L’utente può ottenere istruzioni specifiche attraverso i link sottostanti.

Microsoft Windows Explorer

Google Chrome

Mozilla Firefox

Apple Safari

La disattivazione dei cookie di terze parti è inoltre possibile attraverso le modalità rese disponibili direttamente dalla società terza titolare per detto trattamento, come indicato ai link riportati nel paragrafo “cookie di terze parti”.

Per avere informazioni sui cookie archiviati sul proprio terminale e disattivarli singolarmente si rinvia al link: http://www.youronlinechoices.com/it/le-tue-scelte

Diritti dell’interessato

Art. 7 D. Lgs. 196/2003

1. L’interessato ha diritto di ottenere la conferma dell’esistenza o meno di dati personali che lo riguardano, anche se non ancora registrati, e la loro comunicazione in forma intelligibile.

2. L’interessato ha diritto di ottenere l’indicazione:

a) dell’origine dei dati personali;

b) delle finalità e modalità del trattamento;

c) della logica applicata in caso di trattamento effettuato con l’ausilio di strumenti elettronici;

d) degli estremi identificativi del titolare, dei responsabili e del rappresentante designato ai sensi dell’articolo 5, comma 2;

e) dei soggetti o delle categorie di soggetti ai quali i dati personali possono essere comunicati o che possono venirne a conoscenza in qualità di rappresentante designato nel territorio dello Stato, di responsabili o incaricati.

3. L’interessato ha diritto di ottenere:

a) l’aggiornamento, la rettificazione ovvero, quando vi ha interesse, l’integrazione dei dati;

b) la cancellazione, la trasformazione in forma anonima o il blocco dei dati trattati in violazione di legge, compresi quelli di cui non è necessaria la conservazione in relazione agli scopi per i quali i dati sono stati raccolti o successivamente trattati;

c) l’attestazione che le operazioni di cui alle lettere a) e b) sono state portate a conoscenza, anche per quanto riguarda il loro contenuto, di coloro ai quali i dati sono stati comunicati o diffusi, eccettuato il caso in cui tale adempimento si rivela impossibile o comporta un impiego di mezzi manifestamente sproporzionato rispetto al diritto tutelato.

4. L’interessato ha diritto di opporsi, in tutto o in parte:

a) per motivi legittimi al trattamento dei dati personali che lo riguardano, ancorché pertinenti allo scopo della raccolta;

b) al trattamento dei dati personali che lo riguardano a fini di invio di materiale pubblicitario o di vendita diretta o per il compimento di ricerche di mercato o di comunicazione commerciale.

Titolare

Il titolare del trattamento è ISayBlog