Coldfusion Verity Search engine - ricerche indicizzate - terza parte - query su database
Verity K2 permette, tramite l'uso di CFINDEX, di indicizzare il contenuto di una tabella di database.
CFINDEX applicato ad una query indicizza i campi definiti nel valore body. In fase di ricerca, il tag restituisce:
- il contenuto presente nella chiave (key)
- un titolo definito nella chiave (title)
Di seguito il codice mostra il suo utilizzo.
Tra i molteplici vantaggi nell'utilizzo di Verity, esiste anche la possibilità di utilizzare caratteri speciali e operatori per migliorare la ricerca di stringhe composte o frasi. L'utilizzo di OR, NOT e * permette di combinare stringhe di ricerca direttamente su Form. Verity interpreta le espressioni e ritorna le soluzioni: ad esempio: U2 OR PINK FLOYD provocherà la ricerca di entrambi i gruppi all'interno del database Musica utilizzato nell'esempio. PINK* ricercherà tutti i brani e gli autori che iniziano con la stringa PINK. All'interno della sezione livedocs di Adobe c'è un capitolo dedicato alla gestione delle ricerche su Verity
nell'esempio si suppone di aver creato una collection di nome Musica
--->
<!---
eseguiamo una select dal db, da cui prendiamo i valori da indicizzare
--->
<cfquery name="getAlbumMP3" datasource="#DSN#">
SELECT ID_MP3, MP3_TITOLO, MP3_AUTORE,
MP3_DESCR, MP3_GENERE FROM MP3
</cfquery>
<!---
lanciamo il cfindex sulla collection da aggiornare in base ai dati estratti dalla query
--->
<cfindex
collection="MusicA"
action="refresh"
query="getAlbumMP3"
key="ID_MP3"
title="MP3_TITOLO"
body="MP3_TITOLO,MP3_AUTORE,MP3_DESCR,MP3_GENERE">
<!---
tutti i campi contenuti in body sono stati indicizzati
--->
A questo punto usiamo il Form presentato nella parte uno dell'articolo che ho dedicato a Verity K2 per cercare nella collection. Il form chiamerà il modulo seguente che eseguirà il CFSEARCH
<cfsearch
name="risultatiRicerca"
collection="MusicA"
criteria="#form.parolaChiave#">
</cfif>
il CFSEARCH eseguito ritorna i valori soluzione della ricerca all'interno della variabile risultatiRicerca. In questa variabile di struttura abbiamo diversi parametri interessanti che vedremo tra poco ed è importante capire che a questa variabile possiamo accedere come se fosse una query dotata di recordset
variabili ritornate da CFSEARCH
Title
Il titolo del documento cercato, e nel caso di una query indicizzata, il campo che abbiamo assegnato all'attributo title nel tag
Score
La rilevanza di una parola cercata nel documento, che indica quanto il risultato si avvicina alle parole chiave inserite
RecordsSearched
Il numero totale dei record indicizzati
RecordCount
Numero dei record soluzione della ricerca
Key
Il nome del file del documento cercato e, nel caso di una query indicizzata, il campo che abbiamo dato all'attribute key, nel nostro caso il ID_MP3
Currentrow
Numero del record
Scriviamo ora una tabellina e facciamo l'output dei dati
<tr>
<td>num.</td>
<td>Titolo</td>
<td>Rilevanza</td>
</tr>
<cfoutput query="risultatiRicerca">
<tr>
<td>#Currentrow#</td>
<td><a href="?id=#key#">#Title#</a></td>
<td>#LSNumberFormat(Score * 100, '_._')# %</td>
</tr>
</cfoutput>
</table>
Aggiornamento dei dati e allineamento degli indici della Collection sia per l'inserimento che per l'aggiornamento dei dati della tabella e anche in caso di cancellazione è necessario intervenire sull'indice della collection per aggiornarla, vediamo degli esempio per i tre casi: aggiornamento indice
collection="MusicA"
action="refresh"
query="getAlbumMP3"
key="ID_MP3"
title="MP3_TITOLO"
body="MP3_TITOLO,MP3_AUTORE,MP3_DESCR,MP3_GENERE">
eliminazione di un record dall'indice
action="delete"
key="#form.ID#">
La migliore soluzione per tenere aggiornato l'indice è schedulare un template cfm che esegua il refresh della collection regolamente. Questo esempio è stato visto nella parte due dell'articolo. E' gradito un back-link a questo sito, grazie