Coldfusion Verity Search engine - ricerche indicizzate - terza parte - query su database

  • 03
  • Jan 2007
  • Dev @ Contech Lab
  • View: 6523 | 0 Comments

  • coldfusion | verity

  • 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

    view plain print about
    <!--- 
    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

    view plain print about
    <cfif isDefined('form.parolaChiave') AND form.parolaChiave NEQ "">
    <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

    view plain print about
    <table>
    <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

    view plain print about
    <cfindex 
    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

    view plain print about
    <cfindex collection="MusicA" 
    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