SharePoint Foundation Search Query Object Model
[This documentation is preliminary and is subject to change.]
Search in Microsoft SharePoint Foundation 2010 provides a new Query object model that you can use in custom search Web Parts and search applications to execute queries against the SharePoint Foundation 2010 Search service.
The Query object model is implemented in the Microsoft.SharePoint.Search.Query namespace, found in the Microsoft.SharePoint.Search.dll.
Using the Query Object Model in Custom Search Applications
You can write code that uses the Query object model from different types of applications, including from:
A custom search Web Part hosted in a SharePoint site.
An ASPX Web application.
Choosing Between the Query Object Model and the Query Web Service
Search in SharePoint Foundation also exposes its search functionalities through the Query Web service. Like the Query object model, the Query Web service also support SQL and Keyword syntax queries, and both support returning multiple result types. The primary consideration when choosing between the two for custom applications is the location of the application. If the custom application is local to the server that is running SharePoint Foundation, you can use the Query object model. For remote applications, you must use the Query Web service. For more information about the Query Web service, see SharePoint Foundation Query Web Service.
Accessing the Query Object Model
To use the Query object model, you must set references to the following DLLs:
About the Query Classes
The Microsoft.SharePoint.Search.Query namespace includes three Query classes:
Query This class is not intended to be used directly from your code, but is designed to be the base implementation for the Search Query object model classes. In your code, use the FullTextSqlQuery and KeywordQuery classes.
FullTextSqlQuery Use this class to execute SQL syntax search queries.
KeywordQuery Use this class to execute Keyword syntax search queries.
Choosing a Query Class for a Custom Search Application
To determine the appropriate class to use for your custom search application—FullTextSqlQuery or KeywordQuery—consider the level of complexity in the search queries that you want your application code to support.
If you can create the queries you need using only Keyword syntax, you may prefer to use the KeywordQuery class. If you use Keyword syntax for your search queries, you can pass the search terms directly to the search component and do not need to parse through the search terms to build the query. As a result, the process of constructing queries using Keyword syntax is simple.
However, if you need to construct more complex queries, Keyword syntax might not work. For these queries, you should use the FullTextSqlQuery class. For example, Keyword syntax supports only phrase, word, or prefix exact matches. Also, while you can use Keyword syntax to specify whether to include or exclude a particular search term, you cannot construct complex groupings of included and excluded terms. You can accomplish this by using FullTextSqlQuery.
The following list identifies additional query elements that are supported only with SQL search syntax using the FullTextSqlQuery class:
Executing the Search Query
The flow of execution of the KeywordQuery class and FullTextSqlQuery class is essentially the same. The constructor for the class has two overloads; when instantiating the class, you need to specify one of the following:
Site collection (as an instance of the SPSite class).
The following code example shows how to use the KeywordQuery class.
using Microsoft.SharePoint; ... KeywordQuery qRequest = new KeywordQuery(new SPSite("http://*****");
Reading the Search Results
Following is an example.
ResultTableCollection resultTables = queryRequest.Execute(); ResultTable relevantResults = resultTables[ResultType.RelevantResults]; DataTable resultsDataTable = new DataTable(); resultsDataTable.Load(relevantResults,LoadOption.OverwriteChanges);
There is only one result type returned by Search in SharePoint Foundation relevant results.