企业级搜索查询对象模型概述

Microsoft Office SharePoint Server 2007 企业级搜索提供了一个新的查询对象模型,可在自定义搜索 Web 部件和搜索应用程序中使用以对企业级搜索服务执行查询。

查询对象模型在 Microsoft.Office.Server.Search.dll 中找到的 Microsoft.Office.Server.Search.Query 命名空间中实现。

在自定义搜索应用程序中使用查询对象模型

您所编写的代码可使用来自不同类型应用程序的查询对象模型,包括以下几种应用程序类型:

  • SharePoint 网站中承载的自定义搜索 Web 部件。

  • ASPX Web 应用程序。

查询对象模型支持 企业级搜索 SQL 语法引用企业级搜索关键字语法参考搜索查询。

在查询对象模型和查询 Web 服务之间选择

企业级搜索还通过查询 Web 服务公开其搜索功能。与查询对象模型一样,查询 Web 服务也支持 SQL 和关键字语法查询,并且两者都支持返回多个结果类型。为自定义应用程序在两者之间进行选择时,主要的考虑因素是应用程序的位置。如果应用程序位于运行 Office SharePoint Server 2007 的服务器本地,您可以采用查询对象模型。对于远程应用程序,则必须采用查询 Web 服务。有关查询 Web 服务的详细信息,请参阅企业级搜索查询 Web 服务概述

访问查询对象模型

若要使用查询对象模型,您必须对以下 DLL 设置引用:

  • Microsoft.Office.Server.dll

  • Microsoft.Office.Server.Search.dll

  • Microsoft.SharePoint.dll

查询类

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

  • Query  此类不是直接从代码使用的,但它被设计为企业级搜索查询对象模型类的基础实现。您的代码中使用 FullTextSqlQuery 和 KeywordQuery 类。

  • FullTextSqlQuery  此类用于执行 SQL 语法搜索查询。

  • KeywordQuery  此类用于执行关键字语法搜索查询。

选择自定义搜索应用程序的查询类

若要为您的自定义搜索应用程序(FullTextSqlQuery 或 KeywordQuery)选择合适的类,请考虑您要应用程序代码支持的搜索查询的复杂级别。

如果只使用关键字语法便可创建所需的查询,那么您可能喜欢使用 KeywordQuery 类。如果对搜索查询使用关键字语法,您可以将搜索词直接传递到搜索组件,并且不需要分析搜索词来构建查询。因此,使用关键字语法构造查询的过程很简单。

但如果您需要构建更复杂的查询,关键字语法可能无法达到目的。对于这些查询,应采用 FullTextSqlQuery 类。例如,关键字语法只支持短语、单词或前缀的完全匹配。另外,虽然您可以使用关键字语法来指定是否要包含或排除特定的搜索词,但您不能构造所包含和排除的词的复杂分组。您可以通过使用 FullTextSqlQuery 来实现此目的。

以下列表确定了只有使用 FullTextSqlQuery 类的 SQL 搜索语法才支持的其他查询元素:

  • FREETEXT

  • CONTAINS

  • LIKE

  • ORDER BY

执行搜索查询

KeywordQuery 类和 FullTextSqlQuery 类的执行流实质上是相同的。类的构造函数具有三个重载;实例化类时,您需要指定以下项之一:

  • 网站集(作为 SPSite 类的实例)。

  • 搜索服务共享服务提供程序 (SSP) 的上下文(作为 ServerContext 类的实例)。

  • 搜索服务共享服务提供程序 (SSP) 的应用程序名称(带有 SSP GUID 的字符串)

以下代码示例演示了如何使用 KeywordQuery 类。

using Microsoft.SharePoint;
...
KeywordQuery qRequest = new KeywordQuery(new SPSite("http://*****");

以下代码示例演示了如何使用 FullTextSqlQuery 类。

using Microsoft.Office.Server;
...
FullTextSqlQuery qRequest = new FullTextSqlQuery(ServerContext.Current);

读取搜索结果

ResultTable 类实现了 IDataReader,以便您可以轻松地从代码访问结果行。

以下向您提供一个示例。

ResultTableCollection resultTables = queryRequest.Execute;
ResultTable relevantResults = resultTables[ResultType.RelevantResults];
DataTable resultsDataTable = new DataTable;
resultsDataTable.Load(relevantResults,LoadOption.OverwriteChanges);

结果类型

由企业级搜索返回的搜索结果被分为四个不同的结果类型,如下表中所述。

名称

说明

RelevantResults

主结果集,包含内容索引中与查询匹配的搜索结果。

HighConfidenceResults

包含高可信度结果的结果集。

SpecialTermResults

包含与查询匹配的最佳匹配的结果集。

DefinitionResults

包含与查询匹配的关键字的定义的结果集。

这些结果类型是在 Microsoft.Office.Server.Search.Query 命名空间的 ResultType 枚举中定义的。

See Also

参考

企业级搜索关键字语法参考

概念

企业级搜索 SQL 语法引用

生成自定义企业级搜索 Web 部件

企业级搜索查询 Web 服务概述