Enterprise Search Query Object Model Overview
Enterprise Search in Microsoft Office SharePoint Server 2007 provides a new Query object model that you can use in custom search Web Parts and search applications to execute queries against the Enterprise Search service.
The Query object model is implemented in the Microsoft.Office.Server.Search.Query namespace, found in the Microsoft.Office.Server.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
Enterprise Search 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 application is local to the server running Office SharePoint Server 2007, 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 Enterprise Search Query Web Service Overview.
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.Office.Server.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 Enterprise 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 three overloads; when instantiating the class, you need to specify one of the following:
Site collection (as an instance of the SPSite class).
Context of the Shared Services Provider (SSP) for the search service (as an instance of the ServerContext class).
Application name of the Shared Services Provider (SSP) for the search service (a string with the SSP's GUID)
The following code example shows how to use the KeywordQuery class.
using Microsoft.SharePoint; ... KeywordQuery qRequest = new KeywordQuery(new SPSite("http://*****");
The following code example shows how to use the FullTextSqlQuery class.
using Microsoft.Office.Server; ... FullTextSqlQuery qRequest = new FullTextSqlQuery(ServerContext.Current);
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);
The search results returned by Enterprise Search are grouped into four different result types, as described in the following table.
The main result set, containing search results from the content index that match the query.
The result set containing high-confidence results.
The result set containing best bets matching the query.
The result set containing definitions for keywords matching the query.
These result types are defined in the ResultType enumeration of the Microsoft.Office.Server.Search.Query namespace.