我知道这个问题已经有几个月的时间了,但我目前正在使用 C# 在 Windows Server 2008 R2 上使用 WIS,并在搜索中遇到了这个问题。有时我不能接受否定的答案,所以我搜索了互联网并想出了这个解决方案。
我确定您可以根据需要转换代码,但是...
您必须从服务器管理器的角色安装 Windows Server 2003 文件服务索引服务。
对于目录属性,我禁用了可继承设置并适当地设置了 WWW 服务器。我还生成了 250 个字符摘要存储在 Characterization 列中。
当我设置我的目录时,我包含/排除了我网站目录的某些文件夹(包括站点根目录),当我查询它时,我使用了以下 SQL 语句:
编辑:注意使用FREETEXT(Filename, '\""+q+"\"'))
来查询文件名
String fileTypes = "\".aspx\" OR \".doc*\" OR \".xls*\" OR \".ppt*\" OR \".txt\" OR \".pdf\" OR \".rtf\"";
String q = query.Text.Replace("'", "''");
sSqlString = "SELECT Filename, DocTitle, Size, VPath, Path, Rank, Write, Contents, Characterization ";
sSqlString += "FROM SCOPE() ";
sSqlString += "WHERE (CONTAINS(Contents, '\""+q+"\"') ";
sSqlString += "OR FREETEXT(Filename, '\""+q+"\"')) ";
sSqlString += "AND CONTAINS(Filename, '"+fileTypes+"') ";
sSqlString += "ORDER BY rank DESC, write DESC";
我使用 using 语句创建连接:
using(OleDbConnection conn = new OleDbConnection("Provider=MSIDXS.1;Data Source='"+catalog+"'"))
{
//your connection and data collection code here
}
我遇到的问题之一是某些文件类型。如果文档创建者没有在他们的 MS Office 产品中包含文档标题,您将不会获得 DocTitle。如果 pdf 中没有任何可识别的文本并且未填写文档属性,则 docTitle 和 Content 将为空。我的看法是,如果企业不使他们的文件符合 508 标准,它们将不会正确显示在结果中。
这是我正在使用的 ListView 模板的快速片段。
<ItemTemplate>
<h3><a href="<%# vFilePath(Eval("Path")) %>"><%# Eval("DocTitle").ToString().Trim() == "" ? Eval("Filename").ToString().Split('.')[0] : ProperCase(Eval("DocTitle").ToString()) %></a></h3>
<p><span style="color:#0083be;">
<%# Request.ServerVariables["HTTP_HOST"].Length+vFilePath(Eval("Path")).Length > 100 ? (Request.ServerVariables["HTTP_HOST"]+vFilePath(Eval("Path"))).Substring(0,100)+"..." : Request.ServerVariables["HTTP_HOST"]+vFilePath(Eval("Path")) %></span><br />
<span style="color:#4d4e53"><%# String.Format("{0:MMMM dd, yyyy}",Eval("Write")) %> - </span>
<%# Eval("Characterization").ToString().Trim() == "" ? "..." : Eval("Characterization").ToString().Length == 250 ?
Eval("Characterization").ToString().Substring(0,250)+"..." : Eval("Characterization")%>
</p>
</ItemTemplate>
由于在我的例子中 docTitle 用于结果标题,我认为如果它是空的,我可以使用该空字符串并将其替换为文件名,减去扩展名。
进行查询时,请确保您还使用关键字和描述正确使用元标记。WIS 会读取此内容以及 .aspx 页面上的静态内容。您会注意到我使用 Characterization 来检索内容。
此链接提供有关设置 W2k8 WIS 以及 vb.net 代码的说明。
此链接是可以查询和/或显示的大量属性的良好来源。