Usare Index Server per creare un motore di ricerca interno

di Marco Xodo, in ASP - Scripting,

La maggior parte degli sviluppatori ASP lavorano su piattaforma Microsoft NT 4 con installato il server web Internet Information Server distribuito gratuitamente nell'Option Pack di NT, che, oltre ad IIS, contiene un'altra applicazione molto utile ai webmaster, un motore di ricerca, Index Server appunto.

Con questo articolo vorrei quindi fare luce sulle possibilità offerte da Index Server e soprattutto come interfacciarsi a questa applicazione tramite ASP.
La versione a cui mi riferisco in questo articolo è la versione 2.0 contenuta in Option Pack 4; insieme a NT 5 verrà distribuita la versione 3.0.

Index Server indicizza di default il contenuto di tutte le virtual directory definite in IIS e memorizza le informazioni in un oggetto chiamato Catalogo. Un catalogo incapsula tutti i dettagli necessari per indicizzare e raggiungere ogni documento (parole chiave e percorso). Il catalogo che viene creato di default si chiama "web" e include un'indicizzazione di tutte le directory virtuali contenute nel "Default web site". Nel caso si avessero più siti web all'interno della stessa macchina, è possibile creare un catalogo per ogni sito.

L'interfaccia per la gestione di Index Server è la Microsoft Management Console simile a quella normalmente utilizzata per gestire IIS.

Il modulo di gestione di Index Server

Per creare un nuovo catalogo da MMC è sufficiente scegliere New dal menu che appare premendo il tasto destro del mouse sulla cartella "Index Server on Local Machine". Una volta creato il catalogo, è possibile impostare vare proprietà tra le quali la scelta del sito web da indicizzare ad esso associato.

Immagine

Il percorso di ogni documento indicizzato memorizzato da Index Server è un percorso che parte dalla directory virtuale indicizzata, non è il percorso fisico della cartella in cui risiede il documento.

I documenti che vengono indicizzati di default sono i file HTML, tutti i documenti di testo o prodotti da applicativi MS. Le chiavi che Index Server estrapola dai file HTML sono il titolo, tutte le parole del testo ed il contenuto dei META tag. Per i documenti MS sono indicizzate anche tutte le proprietà del documento, quali l'autore, i commenti, le date di creazione e di salvataggio ecc.. Tramite Index Server è quindi possibile ricercare i documenti scritti da una persona in particolare, oppure quelli salvati in un determinato intervallo di giorni.

Per sapere come effettuare interrogazioni anche in linguaggio naturale a Index Server vi rimando alla documentazione istallata dall'Option Pack.

Lavorando con Index Server ho avuto la necessità di indicizzare dei documenti PDF ed ho incontrato diverse difficoltà che qui espongo brevemente dandone anche una rapida soluzione.

Index Server di default non indicizza i file in formato pdf, per abilitarlo a questa funzione bisogna prima di tutto cercare nel sito Adobe , nella sezione download, un filtro ISAPI Pdf IFilter ora disponibile nella versione 1.0 finale e 1.1 beta (con cui non ho ancora incontrato problemi).

Una volta istallato il filtro Pdf IFilter se tutto è andato bene, i vostri documenti pdf contenuti in virtual directory saranno indicizzati automaticamente.

Se facendo una ricerca con la form di esempio allegata a Index Server vedete che i documenti non sono stati indicizzati, dovete aprire il file di registro, cercare la chiave

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ContentIndex

ed aggiungere il path del file Pdffilt.dll alla chiave DLLsToRegister

Per altri problemi cercate la chiave Index Server nel sito http://support.microsoft.com

Index Server non effettua un'indicizzazione schedulata, in orari fissati, ma ha un processo demone (idemon.exe) che valuta quando ci sono abbastanza risorse disponibili per poter eseguire la scansione dei documenti.

Interrogazione con una pagina ASP

Lo sviluppatore ASP ha a disposizione due oggetti per interagire con Index Server, Query e Utility .

L'oggetto Query è fondamentale in quanto permette di specificare la stringa di interrogazione, l'ordinamento con il quale si vogliono presentare i risultati, i tipi di informazioni da presentare.

L'oggetto Utility si affianca all'oggetto Query per esempio per restringere lo "scope" di una ricerca ad una specificata cartella e non a tutte le virtual directory indicizzate nel catalogo.

Le proprietà principali dell'oggetto Query sono:

  • Catalog : permette si specificare il nome del catalogo da utilizzare nella ricerca. Se non viene impostato alcun catalogo, IS considera quello di default.

    Esempio: Q.Catalog = "Web"

  • Columns : una lista di nomi di colonne, ognuno separato da virgola, che appariranno come campi nel recordset dei risultati.

    Esempio: Q.Columns = "filename, rank, vpath, doctitle"

  • MaxRecods : Limite massimo di record che IS restituisce nel recordset dei risultati.

    Esempio: Q.MaxRecords = 200

  • Query : Stringa contenente le chiavi di ricerca.

    Esempio: Q.Query = "#filename *.htm AND asp"

  • SortBy : elenco dei campi utilizzati per ordinare i record risultanti dalla ricerca. Dopo ogni nome di campo è possibile determinare il tipo di ordinamento ascendente o discendente.

    Esempio: Q.SortBy = "filename, rank[d]"

I medodi prncipali dell'oggetto Query sono:

  • CreateRecordSet : esegue la query e crea un recordset ADO per scorrere i risultati.

    Esempio: Set RS = Q.CreateRecordSet("sequential")

  • Reset : resetta lo stato dell'oggetto query

    Esempio: Q.Reset

Dopo aver impostato le proprietà dell'oggetto Query, è necessario fare eseguire la ricerca che restituisce i dati nella forma di normalissimo RecordSet ADO definibile sequential (forward-only) o nonsequential.

Il codice da inserire in una pagina ASP di ricerca che ci restituisca il nome del file contenente una parola specificata nella stringa CompSearch, è quindi:

 'si crea un'istanza della classe Query
Set Q = Server.CreateObject("ixsso.Query")

Q.SortBy = "rank[d]"   

'si fissa come criterio di ordinamento la raggiungibilità, discendente

Q.Columns = "filename, vpath, rank"  

' si specificano le proprietà dei documenti che vogliamo estrarre:

' il nome del file, il suo virtual path, il tasso di raggiungibilità.

Q.Query = CompSearch

Q.MaxRecords = 100 

' si definisce il numero massimo di documenti che vogliamo siano estratti

Set RS = Q.CreateRecordSet("nonsequential") 

' viene effettuata la ricerca e viene creato il recordset dei risultati

Questo è tutto quel che serve per interfacciarsi in modo "semplice" a IS, facile vero?

È possibile personalizzare la ricerca per esempio definendo un catalogo differente da quello di default e restringere lo scope di ricerca ad una particolare virtual directory (e sottocartelle); per far questo è necessario creare anche un'istanza della classe Util oltre che impostare altre proprietà dell'oggetto Query.

Il codice diviene il seguente:

Set Q = Server.CreateObject("ixsso.Query")  'si crea un'istanza della classe Query

Set util = Server.CreateObject("ixsso.Util")'si crea un'istanza della classe Util

Q.SortBy = "rank[d]"  

'si fissa come criterio di ordinamento la raggiungibilità, discendente

Q.Columns = "filename, vpath, rank"  

' si specificano le proprietà dei documenti che vogliamo estrarre:

' il nome del file, il suo virtual path, il tasso di raggiungibilità.

Q.Catalog = "CatalogoSitoASP"

Q.Query = CompSearch

Q.MaxRecords = 100 ' numero massimo di documenti che vogliamo siano estratti

Q.Catalog = "nomeCatalogo" ' si definisce il catalogo su cui ricercare

Util.AddScopeToQuery Q, "nomeDirVirtuale", "deep"

' deep indica di ricercare anche all'interno delle sottocartelle della virtual directory

Set RS = Q.CreateRecordSet("nonsequential") 

' viene effettuata la ricerca e viene creato il recordset dei risultati

Attenzione che non è possibile utilizzare il metodo AddScopeToQuery passando come virtual directory la root del sito.

2 pagine in totale: 1 2
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata