There is a thread happening internally on a DL (discussion list) re. hooking up Tafiti Search Visualization to MOSS 2007 Search engine to provide a slick UX on top of Enterprise Search.

The current thinking (unvalidated) is you could do the following:

  • Ran the Tafiti front end on the MOSS or Search server
  • Modified the search.aspx to use the Object Model
  • The queries would be issued in the context of the current users and you could then populate the Tafiti result objects and reuse the existing UX elements.

You could hack the following method (where I put the comments):

   private void SoapSearch(SourceType sourceType, string query, int first, int count)
    {
        try
        {
            SourceRequest[] sr = new SourceRequest[1];
            sr[0] = new SourceRequest();
            sr[0].Source = sourceType;
            sr[0].Offset = first;
            sr[0].Count = count;
            sr[0].ResultFields = GetResultFieldMask(sourceType);
            SearchRequest request = new SearchRequest();
            request.Query = query;
            request.Requests = sr;
            request.SafeSearch = SafeSearchOptions.Strict;
            request.AppID = SettingsWrapper.LiveSearchAppID;
            request.CultureInfo = "en-US";

            if (sourceType == SourceType.PhoneBook)
            {
              
// Using Redmond as the search location.
                request.Location = new Location();
                request.Location.Longitude = Double.Parse("-122.33482360839846");
                request.Location.Latitude = Double.Parse("47.6082462871061");
                request.Location.Radius = Double.Parse("5");
            }

            MSNSearchService searchService = new MSNSearchService();
            SearchResponse searchResponse;
            searchResponse = searchService.Search(request);

// You could add the SharePoint search logic in here
// you would need to transform the XML from the SharePoint result set
// to be compatible with the Live Search Service XML
// then you could use the existing JavaScriptSerializer()
            LiveXmlSearchResults result = // the MOSS query logic would go here and return a LiveXmlSearchResults object CreateXmlSearchResults(sourceType, searchResponse.Responses[0]);

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            string json = serializer.Serialize(result);
            byte[] jsonUtf8 = System.Text.Encoding.UTF8.GetBytes(json);

            Response.StatusCode = 200;
            Response.ContentType = "text/javascript";
            Response.OutputStream.Write(jsonUtf8, 0, jsonUtf8.Length);
        }
        catch (SoapException e)
        {
            throw new HttpException((int)HttpStatusCode.InternalServerError, "Internal Server Error", e);
        }
        catch (WebException e)
        {
            throw new HttpException((int)HttpStatusCode.InternalServerError, "Internal Server Error", e);
        }
    }