The main points of interest are that index searches are considerable quicker and can be used to do things such as look at the content of an attachment which a normal store search can not do. Of course there are also a number of things a store search can do that a index search can't because a index search is always limited to searching the properties it indexes.
Using AQS also allows you the opportunity to have more flexible functions and methods when compared with creating search filters in EWS. For example most search filters are hard-coded for a particular property or you create a collection of search filters to apply additional logic. An Example of this would be
SearchFilter sf1 = new SearchFilter.IsEqualTo(ItemSchema.Subject, "Blah");
SearchFilter sf2 = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, DateTime.Now.AddDays(-1));
SearchFilter sfcol = new SearchFilter.SearchFilterCollection(LogicalOperator.And, sf1, sf2);
While the equivalent AQS query that can be used is
Working Out the AQS Syntax
This is perhaps the hardest thing when it comes to using AQS the documentation can be a little confusing and sometimes doesn't show everything you need to know the two articles i would have a look at is firstly
The detail provided in the later is of importance because it provides good detail on what the conditional logic is that can be used with AQS when you need to constructed more advanced searches. For instance if you had to search all messages where a particular name is in the body but where only give part of the first or surname of the person. The COP_WORD_STARTSWITH help do this so you could find say any matches on "Microsoft Exchange" using "body:$<\"Micro Exc\"" this will find any a word starting with micro, followed by a word starting with exc.
Is this useful for SysAdmin's ?
ECP is a exceedingly powerful tool and if you where doing mailbox discoveries then this is what you should be using. However every problem is unique and having this ability availability at the command-line to do this can be very advantages. Using the EWS Managed API allows you to do this in Powershell relatively easily. Eg the following script will take the input of the Mailbox you want it to run against (as primary email address) and AQS query you want to use to search with an return the results to the console
$MailboxName = $args
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.0\Microsoft.Exchange.WebServices.dll"
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://
$aceuser = [ADSI]$sidbind
$folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName)
$iv = new-object Microsoft.Exchange.WebServices.Data.ItemView(2000)
$fiItems = $service.FindItems($folderid, $args, $iv)
foreach ($Item in $fiItems.Items)
With this you can then make queries like
./aqssearch.ps1 email@example.com "sent:today"
./aqssearch.ps1 firstname.lastname@example.org "sent:thismonth"
find attachment content with
./aqssearch.ps1 email@example.com "attachment:Good Movies"
There are a large number of problems you can solve relatively easily just by learning some simple AQS syntax so for both the Admin and developer if your using Exchange 2010 this is something to examine and start using.
I've put a download of the script here.