企业级搜索查询对象模型概述
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 枚举中定义的。