Usare Search come un servizio nei tuoi siti e nei tuoi client

2 pagine in totale: <<Indietro 1 [2]

A questo punto il più è fatto. Basta settare SearchRequest.Query alla stringa contente i termini da ricercare e chiamare search.Search().

Il risultato della chiamata è un oggetto SearchResponse che contiene un array di oggetti Response (uno per ogni SourceRequest inviata).

Tornando al nostro esempio, aprite default.aspx nel designer di Visual Studio e aggiungete i seguenti controlli:

  • un controllo TextBox con ID txtQuery;
  • un controllo ImageButton (o Button) con ID btnDoSearch;
  • un controllo Label con ID lblSpellCorrection (settate la proprietà Visible uguale a False);
  • un controllo LinkButton con ID lbnSpellCorrection (settate la proprietà Visible uguale a False);
  • un controllo DataList con ID lstResponses.

Il binding di lstResponses sarà settato nel codice alla collezione delle Response. Passate alla HTML view del file e definite l'ItemTemplate seguente per la DataList lstResponses:

 
<ItemTemplate> 
  <th colspan="4"><hr/><h3><a id="title_1"></a><%#Eval("Source")%></h3></th> 
  <asp:Repeater id="grdResults" DataSource='<%#Eval("Results")%>' 
  Runat="server"> 
  <HeaderTemplate> 
    <table><tr> 
  </HeaderTemplate> 
  <ItemTemplate> 
    <%#IIf(Not Eval("Image") Is Nothing, "<td>", "<td colspan='4'>")%> 
    <asp:HyperLink id="lnkResult" ImageUrl='<%#toImage( Eval("Image"))%>' 
    Text='<%#Eval("Title")%>' NavigateUrl='<%#Eval("Url")%>' 
    Runat="server"/> 
    <span> - <%#Eval("Source")%></span> 
    <%#Eval("Description")%><p /> 
    <%#IIf(Not Eval("Image") Is Nothing, "</td>", "</td></tr>")%> 
  </ItemTemplate> 
  <FooterTemplate> 
    </tr></table> 
  </FooterTemplate> 
  </asp:Repeater> 
</ItemTemplate> 

Questo non fa altro che mostrare tutte le response e gestire le immagini in modo tale da mostrare i thumbnail in una tabella 5x1.

A questo punto possiamo finire il codice associato alla pagina:

 
Protected Sub btnDoSearch_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDoSearch.Click 
 
  lblSpellCorrection.Visible = False 
  lbnSpellCorrection.Visible = False 
  SearchAndRender(txtSearchBox.Text) 
 
End Sub 

SearchAndRender implementa una certa "intelligenza": qualora il motore di ricerca trovasse un errore ortografico nella query, la query originaria viene scartata e la query con la correzione viene inviata al sistema e processata. Viene consentito all'utente di tornare alla query originaria comunque attraverso lbnSpellCorrection.

L'array delle Responses ha la stessa cardinalità dell'array delle SourceRequests e gli indici sono corrispondenti. Nel nostro caso, abbiamo inviato quattro SourceRequest, nell'ordine spelling, image, news e web e otterremo un array di quattro oggetti Response corrispondenti.

Il source type Spelling ritorna una response vuota (Responses.Result.Length=0) se non ci sono correzioni. Se ce ne sono, riporta in Results(0).Title la correzione suggerita.

Tra tutti i tipi, questo può essere molto utile per abilitare correzioni ortografiche in generale sull'input ricevuto quando non si abbia a disposizione un componente locale per farlo (per esempio, su un sito web). In questo caso, il motore di ricerca non è altro che un fornitore di un servizio di spelling.

 
Protected Sub SearchAndRender(ByVal query As String) 
 
  srchRequest.Query = query 
 
  ' Esegui la ricerca 
  Dim response As SearchResponse = search.Search(srchRequest) 
 
  If response.Responses(0).Results.Length > 0 Then 
 
    ' C'e' stata una correzione ortografica 
    Dim spellCorr As String = response.Responses(0).Results(0).Title 
    lblSpellCorrection.Visible = True 
    lbnSpellCorrection.Visible = True 
    lblSpellCorrection.Text = "Volevi dire " & spellCorr & ", vero?" 
 
    ' Cerca i dati corretti 
    Session.Item("originalQuery") = query 
    SearchAndRender(spellCorr) 
 
  Else 
 
    ' La correzione ortografica e' vuota - Rimuoviamola 
    RenderResults(response.Responses) 
 
  End If 
 
End Sub 
 
Protected Sub RenderResults(ByVal responses As IEnumerable) 
 
  Dim responsesToRender As New List(Of SourceResponse)(responses) 
  responsesToRender.RemoveAt(0) ' Non mostrare lo speller 
  lstResponses.DataSource = responsesToRender 
  lstResponses.DataBind() 
 
End Sub 
 
Protected Sub lbnSpellCorrection_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbnSpellCorrection.Click 
 
  lblSpellCorrection.Visible = False 
  lbnSpellCorrection.Visible = False 
  srchRequest.Query = Session.Item("originalQuery") 
  RenderResults(search.Search(srchRequest).Responses) 
 
End Sub 

A questo punto, con meno di 100 linee di codice in VB, avete una pagina che, data una query, è in grado di mostrare i risultati delle ricerche su web, image e news e di individuare e correggere errori ortografici implementando un "Volevi per caso dire...".

Prima di usare questo codice in produzione, occorrerà aggiungere tutta la parte di gestione degli errori che qui è stata omessa per semplicità.

Notate che tutto il codice è perfettamente utilizzabile se invece di un sito ASP.NET voleste usare un'applicazione WinForms o WPF. Basta cambiare il binding dei controlli ai dati scambiati con il servizio. Negli esempi in VB e C# che si possono scaricare da MSDN, ci sono sia applicazioni WinForms sia WPF che mostrano cosa è possibile fare.

Un altro punto da menzionare è che i dati ritornati sono una collezione di oggetti. Non è necessario passare da HTML per il rendering. Negli esempi lo si fa per praticità, ma si potrebbero usare questi dati per popolare un Dataset con la stessa facilità.

Altre risorse per usare efficacemente Live Search tramite il suo web service

Interactive SDK

Per avere esempi e snippet di codice funzionante con le diverse opzioni, può essere utile l'interactive SDK che è disponibile all'indirizzo http://dev.live.com/livesearch/sdk/.

Scegliendo le diverse opzioni sul menu a sinistra, si possono ottenere snippet di codice in VB o C# pronti per essere copiati ed incollati. Nel prossimo futuro amplieremo la gamma di linguaggi per i quali forniamo snippet pronti all'uso.

Per chi volesse usare il servizio da piattaforme diverse da Windows e .NET, abbiamo una serie di code samples su MSDN per Ruby, Python, Flash, PHP e Java (indirizzo: http://msdn.microsoft.com/en-us/library/cc307874.aspx).

Conclusioni

Con questo articolo speriamo di avervi spinto a guardare con un occhio diverso al motore di ricerca e alle sue interfacce programmatiche, non necessariamente viste come un modo per fare l'automation della ricerca dei dieci link blu, ma anche come un modo per accedere ad una sterminata quantità di informazioni e ad alcuni servizi accessori a valore aggiunto (come il correttore ortografico). Il limite di utilizzo gratuito di 25 mila query al giorno è il più generoso tra tutti i maggiori motori di ricerca e dà accesso alle funzionalità complete (niente throttling o indici vecchi).

Che dire di più? Buon search!

La serie completa su Windows Live Services

2 pagine in totale: <<Indietro 1 [2]

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
alessioarrigoni scrive:
Usare Search come un servizio nei tuoi siti e nei tuoi client

Molto interessante, però vorrei segnalare che non so se è voluta o è una dimenticanza.Quando viene descritto come utilizzare live search all'interno ...
mercoledì 28 maggio 2008

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC