Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->网络应用 ->邮件服务器 ->Exchange Server ->正文

Exchange全文检索概述

来源:Linuxdby.com 作者:Webmaster 时间:2007-05-28 点击: [收藏] [投稿]
FORMSOF:这个谓词需要包含在CONTAINS或者FREETEXT谓词中使用,通过该谓词修饰,可以对关键字的每一个变换形式进行匹配,关键字的变换形式是由搜索引擎决定的。格式为,
FORMSOF( type,"string" [,"string"] )
在Exchange中type参数的值恒为INFLECTIONAL
RANK BY:该谓词通常用来修饰CONTAINS或者FREETEXT谓词,用来表示关键字出现的频度。格式为,
RANK BY CLAUSE (Mechanism, Weight)
其中CLAUSE参数为WEIGHT或者COERCION,WEIGHT表示权值,CORECION居然没有任何说明。Mechanism参数,表示行为,例如WEIGHT或者MULTIPHY。Weight为0-1之间的一个数值,表示权重。
当WHERE子句中包含多部分CONTAINS和FREETEXT时,有了RANK BY,可以认为是匹配度,非常有用。添加RANK BY谓词之后,可以读取"urn:schemas.microsoft.com:fulltextqueryinfo"属性的值,来比较记录之间的匹配程度。我不知道该属性最大的值为多少,但是从获得的实际数据的情况来看,最大为128。
来看一个完整的例子:
Select "DAV:href","urn:schemas.microsoft.com:fulltextqueryinfo:rank"
FROM Scope('DEEP TRAVERSAL OF ""')
WHERE FREETEXT('"program" OR "software"') RANK BY WEIGHT(1.0) OR CONTAINS('FORMSOF(INFLECTIONAL,"java") AND "vb"') RANK BY WEIGHT(0.5)
以上仅仅对有关全文查询相关的内容进行说明,完成的Store SQL的语法,参阅MSDN中的文档。
顺便说一句,Exchange主要提供协同服务,而非文档管理,所以在全文检索的支持上并非特别强大和灵活。MS的另一个服务器产品Sharepoint Portal Server,主要功能是文档管理,其重要应用之一即提供检索服务,所以它的全文检索的功能更加强大一点。除了上述内容外,还提供了NEAR、ISABOUT、RANKMETHOD等修饰项(Term),可以更好的控制查询条件。其中细节也请自行参阅相关文档。
3-3、ADO %26amp; WebDAV
在执行查询时可以采用两种方法,ADO或者WebDAV。这里只列举实现的代码加以说明。
3-3-1、WebDAV。
通过向指定查询的URL发送HTTP的SEARCH请求,命令参数和相应的数据,都是一定格式的XML文档(参看WebDAV的参考手册)。示例如下:
private System.Xml.XmlDocument SendSearchRequest(System.String sUrl,System.String sQuery)
{
System.Net.HttpWebRequest oRequest = null;
System.Net.HttpWebResponse oResponse = null;
System.Net.NetworkCredential oCredential = null;
System.IO.Stream oStream = null;
System.Text.UTF8Encoding oEncoder = new System.Text.UTF8Encoding();
System.Byte[] abData = null;
System.Xml.XmlDocument xmldoc = null;
if ( sUrl == null || sUrl == String.Empty)
return null;
if (sQuery == null || sQuery == String.Empty)
return null;
abData = oEncoder.GetBytes(sQuery);
if (abData == null)
return null;
oCredential = new NetworkCredential("administrator","server",String.Empty);
oRequest = (System.Net.HttpWebRequest) WebRequest.Create(sUrl);
if (oRequest != null)
{
// preparing search request
oRequest.ProtocolVersion = HttpVersion.Version11;
oRequest.Method = @"SEARCH";
if (oCredential != null)
oRequest.Credentials = oCredential.GetCredential(new System.Uri(sUrl),String.Empty);
oRequest.ContentType = @"text/xml";
oRequest.ContentLength = abData.Length;
oStream = oRequest.GetRequestStream();
oStream.Write(abData,0,abData.Length);
oStream.Close();
// waiting for response
try
{
oResponse = (System.Net.HttpWebResponse) oRequest.GetResponse();
oRequest = null;
}
catch(System.Exception e)
{
Trace.WriteLine("SendSearchRequest: " + e.Message);
}
if (oResponse != null)
{
oStream = oResponse.GetResponseStream();

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Microsoft Exchange 2000 群集   下一篇:如何删除和重新安装IIS和Exchange

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号