浅尝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的格式如下:

Query Text

如果不知道这段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特性值就是加入搜索范围的属性名称.

MSSQLFT 表示MS SQL 全文检索,Query Text需填写全文检索查询语句(具体的查询语句可以利用上边提到的MOSS Query Tool生成) 直接在全文检索查询语句中加入属性名称.  

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

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

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

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

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

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

7 Comments

  1. Tracy 说道:

    调用Query方法后出错:“Server was unable to process request. —> Attempted to perform an unauthorized operation."
    请问有人知道原因么?

  2. 笑煞天 说道:

    Sever激活Search Feature了��?

  3. Tracy 说道:

    我用的sharepoint service,请问如何激活search feature啊?
    我在site中查询已经可以查询到内容了
    虽然是service, 应该也可以实现查询的吧,因为我在service的SDK上也见到了这样的sample

  4. 笑煞天 说道:

    WSS啊,应该是可以的,��有没有建立用户凭证?

  5. Tracy 说道:

    用户凭证如何建立啊?
    我的代码如下,麻烦帮我看看有什么问题!

    //The string containing the keyword to use in the search
    string keywordString = "Microsoft";
    //The XML string containing the query request information
    //for the Web service
    string qXMLString = "<QueryPacket xmlns=’urn:Microsoft.Search.Query’>" +
    "<Query><SupportedFormats><Format revision=’1′>" +
    "urn:Microsoft.Search.Response.Document:Document</Format>" +
    "</SupportedFormats><Context><QueryText language=’en-US’ type=’STRING’>" +
    keywordString + "</QueryText></Context></Query></QueryPacket>";
    sz_sps.QueryService queryService = new sz_sps.QueryService();
    queryService.Credentials = new System.Net.NetworkCredential("myName", "myPassword", "myDomain");
    queryService.PreAuthenticate = true;
    queryService.Url = "http://sz-sps/_vti_bin/spsearch.asmx";

    //queryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
    System.Data.DataSet queryResults = queryService.QueryEx(qXMLString);

  6. 笑煞天 说道:

    queryService.Credentials 就是用户凭证,不过���也不大清楚为什么会失败了,怪异…

  7. 小破孩 说道:

    哥哥能不能把你的例子提供下载啊,这个东东好像不是很好弄啊

Leave a Reply