Background

Team Foundation Server is a great ALM tool. However, the search experience wasn't really great. I mean, WIQL is awesome, but it only applies to work items. Although it's a powerful query language (with the incredible ASOF operator), the user experience is far from best.
When we talk about search, we're likely to think of Google. I must admit I use it daily - it's one of the tools in my programmer's toolbox. And since when I began using Windows Desktop Search (then MSN Desktop Search), I felt like the power of Google had been brought to my desktop (well, sort of. :-) ).
Anyway, I always wanted to leverage the simplicity of Google's user experience and the convenience of Windows Desktop Search to provide a full-text search for TFS.

Windows Desktop Search Protocol Handler

That was my first idea: create a WDS protocol handler, in order to index locally my work items and search them from the WDS UI. Much to my disappointment, I was told I couldn't develop a protocol handler using C#. Although I can program in C++, I neither have the skills nor the will to develop a protocol handler in C++. I'd better forget about it - or wait for the day when Microsoft fixes the "don't use .NET for OS extensions" issue.

Noah's "Search Work Items" VS Add-in

Then Noah Coad developed and published his "Search Work Items" add-in. It's a great tool, for it greatly simplifies the process of searching the work item store. But it doesn't offer that "Google-like" experience - it's actually a wrapper around WIQL. Noah mentioned he would eventually add support for traditional search engine notation and the ability to search for specific fields. When I saw those items in his "wish-list", I decided to contribute. The problem was "how?"

Lucene.net

I remembered I had used Lucene.net in a few projects before, and that it offered everything I needed to provide a Google-like experience:
  • Full-text indexing, for great performance;
  • Query parser, for traditional search engine notation in queries;
  • Ability to search for specific fields;
  • Great performance and scalability;
  • 100% managed code, so I could use it in C#.
Originally the idea was to develop a indexer and contribute it to Noah's project, as an alternative and a complement to the WIQL-based search. When I was almost done, someone asked in a certain mailing list: "Is it possible to do full-text search against the Source Control repository?"

In that very moment this project was born. :-)

Last edited Oct 15, 2007 at 2:01 AM by igoravl, version 3

Comments

No comments yet.