Problem

Sage is our search engine that powers http://search.atlassian.com/. It currently looks like this:

It’s not really very much of a search engine, as it simply collates results from several different resources (e.g. Confluence docs, JIRA bugs, Jive forum threads, etc) in a nice format. Whilst the initial interface currently available on http://search.atlassian.com/ has served as well, as we add more products, it’s becoming a little slow and difficult to navigate. Even though searches are run in parallel, results only show up once the slowest resource has completed. Also, as we add more resources, a better way of organizing content was needed.
Another unrelated problem was that Jive Forum queries were broken since moving to Jive Forums 5.5 in which Jive completely redid the RPC interface (webservices vs hessian RPC).

Solution

The interface needed to be asynchronous. Also all resources should be organized in tabs, such that users could navigate to the resource of their choice with a simple click. Finally the UI needed a major facelift (to be provided by our UI team). Forum queries also had to be resurrected.

Execution

The interface was redone using the Yahoo javascript UI library. This provided a nice way of adding search results in tabs, as well as progress bar, and a separate little panel with a search result summary (which can be dragged and closed). All communication to the server is handled by DWR, which required only minimal changes to the backend services involved in running a search. Exposing these services was dead simple since Sage is based on Spring, and DWR supports this very nicely (I was able to simply reference the Spring beans in my DWR configuration):

<dwr>
<allow>
<create creator="spring" javascript="SearchSupport">
<param name="beanName" value="searchManager"/>
</create>
<create creator="spring" javascript="SearchableResourceManager">
<param name="beanName" value="searchableResourceManager"/>
</create>
<convert converter="bean" match="com.atlassian.sage.search.SearchResult"/>
<convert converter="bean" match="com.atlassian.sage.search.*"/>
<convert converter="bean" match="com.atlassian.sage.resource.*"/>
</allow>
</dwr>

Cross-browser testing presented probably the major obstacle since despite using the YUI libraries all sorts of browser quirks popped up. For example on Internet explorer, the progress bar starts in the middle and expands to both sides, whereas on all other browser, it simply scrolls from the left to the right (as expected). Some of these are still not resolved (and probably never will be).

Result

Sage 2.0 is now available on http://search.atlassian.com/atlassian-sage-2.0.2/:

There’s still a couple of minor little bugs to iron out, but as soon as that’s done we’ll switch to Sage 2.0.