代码改变世界

浅尝MOSS Search Query Web Service

2007-04-03 10:03 Windie Chai 阅读(...) 评论(...) 编辑 收藏
 

    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

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

    QueryText type

    QueryText value

    增加搜索范围

    范例

    STRING

    关键字

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

    <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方法之前,否则会提示验证失败.