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




Windie Chai @ 豆瓣
windiechai @ Twitter
windiechai @ 新浪微博
调用Query方法后出错:“Server was unable to process request. —> Attempted to perform an unauthorized operation."
请问有人知道原因么?
Sever激活Search Feature了��?
我用的sharepoint service,请问如何激活search feature啊?
我在site中查询已经可以查询到内容了
虽然是service, 应该也可以实现查询的吧,因为我在service的SDK上也见到了这样的sample
WSS啊,应该是可以的,��有没有建立用户凭证?
用户凭证如何建立啊?
我的代码如下,麻烦帮我看看有什么问题!
//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);
queryService.Credentials 就是用户凭证,不过���也不大清楚为什么会失败了,怪异…
哥哥能不能把你的例子提供下载啊,这个东东好像不是很好弄啊