0

我是第一次使用 Windows 索引服务,我需要从查询中返回文档标题和文件名。

我的查询是;

select doctitle, filename, vpath, rank, characterization from scope() where FREETEXT(Contents, '" & searchText & "') order by rank desc

我设置了一个相当基本的目录,只是指向一个文件夹。我正在使用来自网站的此代码,文件位于本地计算机上,身份验证应该不是问题。

我的搜索返回结果,但文件名属性中没有任何内容。doctitle 已填充,但没有其他内容。

谢谢,迈克

4

2 回答 2

1

我知道这个问题已经有几个月的时间了,但我目前正在使用 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 代码的说明。

链接是可以查询和/或显示的大量属性的良好来源。

于 2012-03-30T15:45:35.013 回答
0

我在这篇文章中找到了答案; http://support.microsoft.com/kb/954822

由于对 IIS 7.0 所做的设计更改,您无法在 Windows Server 2008 中为 Internet 信息服务 (IIS) 网站编制索引。

继任者或索引服务是 Windows Search。 Windows 搜索维基

看起来我将不得不更改站点以使用 Windows 搜索。

于 2011-12-21T15:14:50.120 回答