在SPS2003中实现定制的搜索
在SPS2001中,可以使用WebDAV来做搜索,但很不幸,在SPS2003中,不再支持这个功能。所以如果要再实现定制的搜索功能,需要使用SPS2003中的对象模型QueryProvider。
微软的网站上,可以看到对应的SDK:
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/cQueryProvider.asp
但缺乏例子。我们下面就来看看一个简单的例子:
PortalContext pcx = PortalApplication.GetContext();
string sSearchAppName = pcx.SearchApplicationName;
QueryProvider qp = new QueryProvider(sSearchAppName);
string SQL = "select \"DAV:displayname\", " +
"\"DAV:href\" " +
"from (TABLE Portal_Content..Scope() UNION ALL TABLE Non_Portal_Content..Scope())" +
"where freetext('Microsoft')";
System.Data.DataSet objTmpDS;
objTmpDS = qp.Execute(SQL);
DataGrid1.DataSource = objTmpDS.Tables[0].DefaultView;
DataGrid1.DataBind();
很简单,在整个SPS网站范围内,搜索包含”Microsoft”的内容。
下面有几个地方解释一下:
1. Portal_Content和Non_Portal_Content是SPS默认的两个Content Index,我们也可以自己加,然后就可以在Content Index中加入Content Source了。
2. 返回的结果,只是简单地在一个DataGrid中显示出来。
3. SPS2003的Object Model,只能本地调用,不可以远程调用。
所以,如果要在远程调用,就需要使用Web Service了。同样,SPS2003默认也提供了一些Web Service,包括搜索的Web Service(https://server/_vti_bin/search.asmx)。
我们可以看看下面的一个例子:
string registrationString = "<RegistrationRequest revision=\"1\" xmlns=\"urn:Microsoft.Search.Registration.Request\" action=\"NEW\"/>";
QueryService.QueryService myservice = new QueryService.QueryService();
myservice.Url="https://server/_vti_bin/search.asmx";
NetworkCredential Credential = CredentialCache.DefaultCredentials.GetCredential(new Uri(myservice.Url), "NTLM");
myservice.Credentials = Credential;
myservice.Registration(registrationString);
string queryString = "<QueryPacket xmlns='urn:Microsoft.Search.Query' revision='1'><Query><Context><QueryText type='STRING' language='en-US'>SharePoint Portal Server</QueryText><LanguagePreference>en-US</LanguagePreference></Context></Query></QueryPacket>";
DataSet dsResults;
dsResults = myservice.QueryEx(queryString);
DataGrid1.DataSource = dsResults.Tables[0].DefaultView;
DataGrid1.DataBind();
Comments
- Anonymous
September 29, 2004
如果爲了不佔用頻寬,我刪除Portal_Content和Non_Portal_Content這兩個索引,會有什麽影響呢?Portal_Content和Non_Portal_Content分別代表什麽? - Anonymous
September 29, 2004
Portal_Content
包含Portal站点上的内容和People
Non_Portal_Content
包含WSS站点中的内容
这两个应该是删除不掉的。