企业级搜索查询体系结构

上次修改时间: 2010年4月16日

适用范围: SharePoint Server 2010

  • 联合搜索对象模型
    使用联合搜索对象模型,可以将多个搜索引擎或存储库的结果集中在一起。您可以使用联合搜索对象模型针对 SharePoint Server 搜索、FAST Search Server 2010 for SharePoint、OpenSearch 位置以及自定义运行时执行查询。SharePoint 企业级搜索中的搜索结果 Web 部件是在联合搜索对象模型之上生成的。

  • 查询对象模型
    在 Microsoft Office SharePoint Server 2007 企业级搜索中,使用查询对象模型创建自定义搜索 Web 部件和搜索应用程序。SharePoint Server 2010 提供此对象模型的更新的版本。您可以使用查询对象模型针对 SharePoint Server 搜索和 FAST Search Server 2010 for SharePoint 执行查询。当您使用联合搜索对象模型从 SharePoint Server 搜索和 FAST Search Server 2010 for SharePoint 返回结果时,查询对象模型实际上是从联合搜索对象模型调用的。

使用联合搜索对象模型

联合搜索对象模型是在 Microsoft.Office.Server.Search.Query 命名空间中实现的,可以在 Microsoft.Office.Server.Search.dll 中找到它。您必须设置对以下 DLL 的引用才能访问联合搜索对象模型:

  • Microsoft.Office.Server.dll

  • Microsoft.Office.Server.Search.dll

  • Microsoft.SharePoint.dll

多个类提供对象模型中的功能。以下各节对这些类进行了说明。

QueryManager

QueryManager 类是入口点,通过它访问属于联合搜索对象模型的其他类。此类提交查询请求并返回结果。您还可以在提交查询之前从此类修改它。

LocationList

LocationList 类包含联合位置的列表,并负责聚合某个位置的结果并返回它们。

Location

Location 类表示对象模型中的联合位置。

ILocationRuntime

如果需要提供自定义提供程序的实现,可以使用 ILocationRuntime 接口。

返回搜索结果

这些结构作为 XML 返回。以下代码示例演示如何使用联合搜索对象模型返回搜索结果:

    long lastupdate;
    bool crawl;
    SearchServiceApplicationProxy proxy =
(SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
    LocationConfiguration[] locationConfigs;
    LocationConfiguration locationConfig = null;
    locationConfigs = proxy.GetLocationConfigurations(out lastupdate, out crawl);
    Location location;
    LocationList locationList = new LocationList();
    QueryManager queryManager = new QueryManager();
    foreach (LocationConfiguration locConfig in locationConfigs)
    {
        if (locConfig.InternalName.Equals("LocalSearchIndex"))
        {
            locationConfig = locConfig;
        break;
        }
    }
    location = new Location(locationConfig.InternalName, proxy);
    location.UserQuery = queryText;
    locationList.Add(location);
    queryManager.Add(locationList);
    queryManager.IsTriggered(locationList);
    XmlDocument xDoc = queryManager.GetResults(locationList);

有关该示例代码的完整分步演练,请参阅演练:使用联合对象模型创建基本搜索 Web 部件

使用查询对象模型

查询搜索对象模型是在 Microsoft.Office.Server.Search.Query 命名空间中实现的,可以在 Microsoft.Office.Server.Search.dll 中找到它。您必须设置对以下 DLL 的引用才能访问查询对象模型:

  • Microsoft.Office.Server.dll

  • Microsoft.Office.Server.Search.dll

  • Microsoft.SharePoint.dll

关于查询对象模型类

Microsoft.Office.Server.Search.Query 命名空间包含三个查询类:

  • Query 此类不适合于直接从代码中使用,但适合于作为查询对象模型类的基实现。在您的代码中,使用 FullTextSqlQuery 和 KeywordQuery 类。

  • FullTextSqlQuery 使用此类可以执行 SQL 语法搜索查询。

  • QueryKeywordQuery 使用此类可以执行关键字语法搜索查询。

以下代码示例演示如何使用查询对象模型返回搜索结果

SearchServiceApplicationProxy proxy = (SearchServiceApplicationProxy)SearchServiceApplicationProxy.GetProxy(SPServiceContext.GetContext(SPContext.Current.Site));
KeywordQuery query = new KeywordQuery(proxy);
query.ResultsProvider = Microsoft.Office.Server.Search.Query.SearchProvider.Default;
query.QueryText = queryText;
query.ResultTypes |= ResultType.RelevantResults;
ResultTableCollection searchResults = query.Execute();
if (searchResults.Exists(ResultType.RelevantResults))
{
    ResultTable searchResult = searchResults[ResultType.RelevantResults];
    DataTable result = new DataTable();
    result.TableName = "Result";
    result.Load(searchResult, LoadOption.OverwriteChanges);
}

有关该示例代码的完整分步演练,请参阅演练:使用查询对象模型创建基本搜索 Web 部件