Google Mini images in results ASP.NET

Providing search for our ASP.NET site has been left to an implementation of the Google Mini. This choice was for speed of set up, user familiarity with result sets generated and the fact that Microsoft Search was not released when the decision was made. The Google Mini is a 1U high rack mount server hardware supplied by Google. It provides a web browser administrator interface and lets you integrate it into your site in a few different ways. We fire requests to it and get an XML results file back that we then manipulate to produce a good search experience. We use the GSALib port of the gsa-japi Jarva library.

Now we have it up and running it has now become time to start tinkering a bit to try and get better results. The first challenge was getting product image thumbnails shown next to the search results from the Google Mini. This actually was very simple to achieve. The Mini understands meta tags in your html. If you put the following into the section of the product pages:

Then then when the mini indexes your pages, this tag together with any others present, will be stored as a collection against that page’s result. You must explicitly ask for the meta tags to be included in the XML results from the Mini if you wish to consume them in the resulting XML from the search appliance.

   1: Dim objQuery As New GSA.Query

   2: Dim collections(0) As String

   3: collections(0) = _searchSiteCollection

   4: objQuery.setSiteCollections(collections)

   5: objQuery.setFrontend(_searchFrontEnd)

   6: objQuery.setOutputFormat(GSALib.Constants.Output.XML_NO_DTD)

   7: objQuery.setOutputEncoding(Constants.Encoding.UTF8)

   8: objQuery.setAccess(Constants.Access.PUBLIC)

   9: objQuery.setScrollAhead(CInt(_searchStartPageIndex))

  10: objQuery.setMaxResults(_searchPageSize)

  11: objQuery.setFilter(_searchFilter)

  12: 'Set set FetchMataFields=* to get all meta tags associated with page result

  13: Dim o As String() = {"*"}

  14: objQuery.setFetchMetaFields(o)

As you can see a call to setFetchMetaFields has been passed “*” this means return all meta tags from this pages result. You may if you prefer pass a string array of meta tags you are interested in seeing to reduce the returned tags. You may also use meta tags for filtering result sets by meta tag, but not part of this discussion.

Now the results will include an XML node that contains the meta tags, this is exposed through the GSA library as a string collection hanging off the search page result it is associated with. Thus we can now show the image on the page using data binding in our repeater control, thus:

<asp:HyperLink ID="sImgLnk" NavigateUrl='<%# Server.HtmlDecode(eval("Url")) %>'

  runat="server" meta:resourcekey="HypImageResource2">asp:HyperLink>:HyperLink>

   1: Protected Sub repeaterProductResults_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repeaterProductResults.ItemDataBound

   2:     If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then

   3:         Dim SearchResult As GSA.Result = CType(e.Item.DataItem, GSA.Result)

   4:         If SearchResult.Metas.Contains("tw-ItemImg") Then

   5:             DirectCast(e.Item.FindControl("sImgLnk"), HyperLink).ImageUrl = ConfigurationManager.AppSettings("PathToProductThumbs").ToString & SearchResult.Metas("can-ItemImg")

   6:         Else

   7:             DirectCast(e.Item.FindControl("sImgLnk"), HyperLink).ImageUrl = ConfigurationManager.AppSettings("PathToProductThumbs").ToString & "noimage.gif"

   8:         End If

   9:     End If

  10: End Sub

Thus you now have item images against the items. You can obviously expand this so that all your pages could have a “searchimage” meta tag so that news items or other content could all have individual thumbs.