Metodi di ricerca custom

La ricerca di informazioni in un database relazionale può essere effettuata in diversi modi. Dalla classica ricerca basata sui campi chiave e sulle tipologie di oggetto da ricercare, fino ad una ricerca avanzata basata sul contenuto degli oggetti del sistema informativo.

Metodi di ricerca classica

Solitamente si effettuano ricerche su campi predefiniti del sistema, ad esempio per ricercare un record in una anagrafica si indicizzano campi chiave come la ragione sociale o campi di indicazione geografica. La ricerca poi può comunque essere effettuata su tutti i campi dell'anagrafica anche se non sono indicizzati. Le ricerche su questi campi però hanno un costo di esecuzione maggiore ed inoltre non consentono un alta flessibilità per recuperare le informazioni.

Metodi di ricerca avanzata

Come metodi di ricerca avanzata voglio presentare alcune strutture/metodologie che si possono utilizzare per permettere una maggiore flessibilità ed accuratezza nel compiere ricerche.

  • indicizzazione full text
  • free tagging
  • indici custom

Indicizzazione full text

I moderni DBMS (Microsoft SQL Server 7.0, MySQL 5.0, Oracle 9, tanto per citarne alcuni) supportano la cosiddetta ricerca linguistica che consente di creare indici speciali di parole e frasi pertinenti in campi di specifiche tabelle. Grazie a questo metodo di ricerca è possibile trovare non solo parole singole, ma anche combinazioni di parole, frasi e, anche se con dei limiti, dei concetti. La ricerca full text è l'unico metodo che pesa i risultati ottenuti in base alle occorrenze della stringa cercata nel database. Tale metodo permette di ordinare i risultati in base alla pertinenza alla stringa cercata.

Free Tagging

La ricerca basata sul contenuto degli oggetti permette di effettuare ricerche non solo sui dati che riguardano strettamente gli oggetti del sistema, ma anche su informazioni aggiuntive gestite autonomamente dall'utente, utilizzate per catalogare le informazioni secondo uno schema non stabilito a priori. E' possibile inserire nello schema degli oggetti, dei campi aggiuntivi indicizzati che possono contenere informazioni specifiche per ogni istanza dell'oggetto. Tali informazioni sono stabilite dall'utente al momento della creazione o modifica dell'oggetto stesso. Per oggetto si intende qualunque entità informativa contenuta nel database.

Con il termine tag (etichetta) si intende un campo aggiuntivo dove poter effettuare ricerche. Possiamo vedere i tag come quei campi che, ad esempio, stabiliscono se un contatto in una anagrafica è un cliente, un fornitore o entrambi. Tale pratica è ormai di uso comune. Il free tagging è un modo nuovo per organizzare le informazioni: non si limita più l'utente a compiere delle scelte predefinite, ma gli si lascia la libertà di aggiungere indicazioni arbitrarie per identificare l'oggetto che sta manipolando, che sia un record dell'anagrafica, un documento di testo, una foto oppure una fattura.

La filosofia del free tagging è di non forzare l'utente ad utilizzare degli indicatori stabiliti dall'alto per catalogare le informazioni, bensì dargli la possibilità di scegliere come poterle gestire attraverso delle keyword personali.

Sfruttando i metodi classici di ricerca sui campi chiave degli oggetti e su campi che contengono infomazioni extra per l'identificazione stabilite dall'utente, è possibile effettuare ricerche più precise ed ottimizzate alla specifica tassonomia dell'oggetto ricercato.

Esempi pratici sono le "Smart Folders" di MacOS X o il servizio Flikr per la catalogazione di fotografie online.

Indici custom

Un aspetto più tecnico della questione è come scegliere quali campi indicizzare. Gli utenti potrebbero avere la necessità di effettuare ricerche su dei campi piuttosto che su altri. Non essendo conveniente strutturare il database decidendo di indicizzare ogni campo (tale soluzione comprometterebbe le prestazioni del sistema), potrebbe essere necessario sviluppare un metodo per poter modificare (quasi) a "run-time" lo schema delle tabelle, in particolare le proprietà di indicizzazione

ciao, in ambito di ricerche hai mai provato a costruire in box di ricerca in Drupal che restituisca i risultati all'interno dello stesso box? ... magari imponendo che le parole di ricerca siano i TAG contenuti nel nodo che sto visualizzando in questo momento...