L'interfaccia utente
L'interfaccia utente é stata sviluppata in maniera piuttosto semplice, senza eccessiva
ricercatezza sia dal punto di vista grafico che dei contenuti, ed é divisa in due sezioni:
la ricerca semplice e la ricerca avanzata
(N.B.: i collegamenti sono stati rimossi perche´ non utilizzabili).
La prima utilizza un unico campo per l'immissione della query di richiesta e sfrutta il fulltext index "generale"
creato precedentemente nella base di dati MySql.
La seconda utilizza cinque campi corrispondenti ai rimanenti indici creati in MySql e due campi aggiuntivi
riguardanti l'indirizzo ip e il nome dell'host.
Notiamo innanzi tutto che gli indici creati possono sembrare ridondanti (tutti tranne "commento" comprendono le
colonne "nome_file" e "path"). Questa scelta è dovuta sia all'elevato numero di valori mancanti che all'idea
che differenti persone possano catalogare sul proprio computer i files mp3 in modo vario (una cartella per ogni cantante,
una cartella per ogni album, il nome dell'artista nel nome del file, ...).
I due campi aggiuntivi senza indice ("nome_file" e "path") differiscono dagli altri principalmente per la quantità
di informazioni differenti che hanno al loro interno: se per esempio possiamo supporre che i nomi dei files siano
differenti uno dall'altro, non possiamo pensare la stessa cosa per il nome dell'host (per ogni host ci saranno centinaia
o migliaia di righe). Inoltre gli indirizzi ip sono composti da quattro numeri compresi tra 0 e 255, il che implica
che ogni "parola" è composta da tre cifre (la lunghezza minima di una stringa perché sia presa in
considerazione durante l'indicizzazione é per default quattro). Per questo la ricerca dell'indirizzo ip
e del nome dell'host non avvengono tramite indice, ma con una semplice richiesta del tipo "where (ip like '%127.0.0.1%')".
La ricerca avanzata può servire principalmente a due scopi: restringere le ricerche in caso di numero eccessivo
di risposte (il codice php in pratica effettua una richiesta a MySql concatenando i singoli parametri richiesti
con una serie di AND) o effettuare una ricerca che coinvolga anche uno specifico computer tramite la richiesta
di un certo indirizzo ip o di un certo nome dell'host (tale possibilità non é presente nella modalità
di ricerca semplice).
A loro volta queste due sezioni si dividono in interfaccia utente di input, nella quale l'utente riempie un
form descrivendo i parametri della ricerca che intende effettuare, e di output, nella quale viene visualizzato il risultato
della ricerca effettuata.
Il codice php di output effettua una semplice connessione al DBMS (MySql) con alcuni parametri di default
(username, password, database, ...) ed effettua una ricerca nella tabella "Mp3" cercando le parole
chiave che l'utente ha scritto nel form dell'interfaccia.
La query utilizzata per interrogare il DBMS é una semplice richiesta nella forma "select * from mp3
where (match(artista,path,nome_file) against('litfiba')) and ...", dove le parole chiave presenti
nella clausola "where" (in questo caso 'litfiba') sono quelle scritte dall'utente.
L'output, graficamente, si presenta come una semplice tabella in cui sono descritti i campi ritornati da MySql, associati
ad un collegamento al file (se questo è disponibile in linea).
Una possibile futura implementazione potrebbe essere l'ordinamento dell'output anche in base alla disponibilità
o meno nel download del file trovato.
In fondo alla pagina di output é possibile anche leggere il numero di righe ottenute dalla ricerca (variabile
$numero nel codice php).
Per quel che riguarda l'interrogazione del DBMS é stato scelta la modalità di default (e non la ricerca
"in boolean mode") per due motivi: innanzi tutto perché MySql é naturalmente basato sulla struttura
vettoriale; in secondo luogo perché cosí otteniamo un ordinamento molto più sfumato rispetto
alla semplice presenza/assenza tipica del modello booleano.
L'ordinamento ottenuto tramite semplice interrogazione offre inoltre un output già ordinato in base alla
rilevanza delle parole cercate. Questa rilevanza si basa sia sul numero di parole nella riga, sia sul numero
totale di parole nella collezione e sul numero di righe che contengono una particolare stringa.
Se per esempio una parola cercata é rara, avrà un peso alto. Al contrario se una stringa é
molto frequente (senza superare la soglia del 50% della presenza nelle righe che porterebbe all'inserimento della
parola nella stopword list) il suo peso sarà minore. Il peso delle parole é poi combinato per calcolare
la rilevanza della riga.
Nelle ultime versioni di MySql (dalla 4.1.1) la ricerca full-text supporta anche la "query expansion" (blind query
expansion). Nel nostro caso, poiché non ci troviamo ad analizzare documenti di tipo testuale,
questo tipo di ricerca porterebbe solo ad un allungamento dell'output e ad un
aumento dei documenti (file mp3) reperiti non significativi.
Un possibile sviluppo futuro potrebbe essere una implementazione tipo Amazon: se una persona é interessata
ad un certo cantante potrebbe (sulla base di conoscenza acquisita dai precedenti utenti) essere anche interessato
ad un altro cantante che fa musica simile. Questo richiederebbe però una struttura che va ben oltre
la semplice "blind query expansion" offerta da MySql.
Data creazione: 17 Settembre 2010
Data ultima modifica: 30 Dicembre 2012