Two years back in this post on fulltext search in the catalog system, I had explained how fulltext searches are performed in the catalog system and added the following comment
"Providing an increased number of search features/conditions is something we are looking forward to, in the upcoming releases. This should allow you to specify more complex search phrases."
Commerce Server 2007 now allows you to specify complex search phrases which allow you to customize your searches to the finest level of granularity. If the default freetext search behavior as described in the above link does not work for you, you can now use the new AdvancedFreeTextSearchPhrase property on the CatalogSearch object. An example of using this property to implement Thesaurus support is provided in this link. Note that when you set this property you should also set the UseAdvancedFreeTextSearch to true. This is to avoid ambiguity on whether the value specified for AdvancedFreeTextSearchPhrase or FreeTextSearchPhrase property should be used to perform the search.
Here are some additional search scenarios for which you can use this new property.
catalogSearch.AdvancedFreeTextSearchPhrase = "\"Commerce Server 2007\"";
catalogSearch.AdvancedFreeTextSearchPhrase=" \"Commerce Server 2007\" AND \"Sql Server\" ";
catalogSearch.AdvancedFreeTextSearchPhrase=" \"Commerce Server 2007\" OR \"Sql Server\" ";
catalogSearch.AdvancedFreeTextSearchPhrase=" Commerce* OR \"Sql Server\" ";
catalogSearch.AdvancedFreeTextSearchPhrase="2007 NEAR \"Commerce Server\"";
catalogSearch.AdvancedFreeTextSearchPhrase="FORMSOF (Inflectional,dry)";
catalogSearch.AdvancedFreeTextSearchPhrase="(\"commerce \" OR \"sql server\") and not ASP\"";
The above are just some of the scenarios. To truly understand what else you can do take a look at this link. Determine the clause which best reflects your search criteria and pass it to the AdvancedFreeTextSearchPhrase as in the above example.
For a complete code sample and additional filtering using other criteria like "list price < $100 AND IsActive=1" see this post.