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
- Introduzione ai cloud based service con Windows Live Services di Daniele Bochicchio
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni di Daniele Bochicchio
- Mappe nel tuo sito con Virtual Earth di Stefano Mostarda
- Usare Search come un servizio nei tuoi siti e nei tuoi client di Alessandro Catorcini, Paolo Codato
2 pagine in totale: <<Indietro 1 [2]
Contenuti dell'articolo
- L'object model di Microsoft SharePoint - Seconda parte
- L'object model di Microsoft SharePoint - Prima parte
- La gestione dello stato da ASP.NET 1.x ad ASP.NET 3.5
- Routing e dynamic data control di ASP.NET 3.5 SP1
- I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
- Galleria fotografica dinamica con ASP.NET AJAX
- Mappe nel tuo sito con Virtual Earth
- Integrare Windows Live ID, Contacts e Presence API nelle tue applicazioni
- Introduzione ai cloud based service con Windows Live Services
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Molto interessante, però vorrei segnalare che non so se è voluta o è una dimenticanza.Quando viene descritto come utilizzare live search all'interno ...
Continua »»» | Rispondi »»»