浅尝MOSS Search Query Web Service【转】

SharePoint Server 2007 Search 提供一个 Query Web Service,我们可以通过调用Web Service的方式向非SharePoint站点的客户端应用程序提供搜索功能.

MOSS中搜索服务的URL是:

http://Server_Name/[sites/][Site_Name/]_vti_bin/search.asmx

 

此Web Service中有两个方法来提交搜索:

Query

以XML形式返回指定查询的结果

QueryEx

以ADO.NET DataSet 对象形式返回指定查询的结果

这两种方法不仅返回结果的类型不一样,返回的内容(包含的属性)也不一样.

Query默认返回以下内容:

  • Title
  • Description
  • Date
  • Relevance

QueryEx默认返回以下内容:

  • WorkId
  • Rank
  • Title
  • Author
  • Size
  • Path
  • Description
  • Write
  • SiteName
  • CollapsingStatus
  • HitHighlightedSummary
  • HitHighlightedProperties
  • ContentClass
  • IsDocument
  • PictureThumbnailURL

虽然这两种方法的返回值是不同的,但它们的参数却是相同的:QueryXML.

QueryXML的格式如下:

<QueryPacket>

    <Query>

        <QueryId />

        <SupportedFormats>

            <Format />

         </SupportedFormats>

        <Context>

            <QueryText  language="zh-CN" type="MSSQLFT|STRING">Query Text</QueryText>

            <OriginatorContext />

        </Context>

        <Range>

            <StartAt />

            <Count />

        </Range>

        <Properties name="PROPERTY NAME">

            <Property />

        </Properties>

        <SortByProperties>

            <SortByProperty />

        </SortByProperties>

        <EnableStemming />

        <TrimDuplicates />

        <IncludeSpecialTermResults />

        <IgnoreAllNoiseQuery />

        <IncludeRelevantResults />

        <IncludeHighConfidenceResults />

    </Query>

</QueryPacket>

如果不知道这段XML中具体的属性应该怎样填写可以下载MOSS Query Tool( http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=89b3cda7-aad9-4919-8faf-34ef9b28c57b )这个工具,它可以生成XML.

对于这段XML,我们需要注意粗体的部分:

  • Language
    不同的语言对应不同的切词技术,比如英文可以根据空格来间隔单词,但中文的切词就复杂很多,所以一定要注意要搜索的内容的语种,否则可能出现没有结果的现象.
  • Type

值可以有两种选择:STRING或MSSQLFT,区别与使用方法如下表所示:

QueryText type

QueryText value

增加搜索范围

范例

STRING

关键字

在QueryXML中为Query元素增加子元素Property,每个Property对应一个属性,Property的name特性值就是加入搜索范围的属性名称.

<Context><QueryText language="zh-CN" type="STRING"><![CDATA[KEYWORDS]]></QueryText></Context><Properties name="PROPERTY_NAME">

            <Property />

MSSQLFT

表示MS SQL 全文检索,Query Text需填写全文检索查询语句(具体的查询语句可以利用上边提到的MOSS Query Tool生成)

直接在全文检索查询语句中加入属性名称.

<QueryText language="zh-CN" type="MSSQLFT"><![CDATA[SELECT Title, Rank, Size, Description, Write, Path, PROPERTY_NAME FROM portal..scope() WHERE FREETEXT(DefaultProperties, 'KEYWORDS') ORDER BY "Rank" DESC]]></QueryText>

最后,在调用Query或者QueryEx方法之前,我们还需要建立"凭证"让客户端通过MOSS的验证.

如果确定客户端和MOSS服务器在同一域中并有权限执行搜索,可以使用默认凭证:

qs.Credentials = System.Net.CredentialCache.DefaultCredentials;

如果客户端不在MOSS域中(比如客户端运行在LINUX等平台中),可以指定搜索用户:

qs.Credentials = new System.Net.NetworkCredential("用户名","密码","域名");

这一步必不可少,而且必须在调用Query或者QueryEx方法之前,否则会提示验证失败.

posted @ 2010-09-05 01:43  小师傅  阅读(270)  评论(0编辑  收藏  举报