索引服务空文件名属性

时间:2011-12-21 14:47:22

标签: vb.net indexing-service

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

我的查询是;

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

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

我的搜索返回结果但文件名属性中没有任何内容。文字是填充的,但没有别的。

谢谢, 麦克

2 个答案:

答案 0 :(得分: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用于结果标题,我认为如果它是空的,我可以取空字符串并用文件名替换它,减去扩展名。

进行查询时,请确保使用关键字和说明正确使用元标记。这个以及.aspx页面上的静态内容确实可以被WIS读取。你会注意到我使用Characterization来检索内容。

link提供有关设置W2k8 WIS以及vb.net代码的说明。

link是可以查询和/或显示的众多属性的良好来源。

答案 1 :(得分:0)

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

  

您无法索引Internet信息服务(IIS)网站   Windows Server 2008因为进行了设计更改   IIS 7.0。

后继或索引服务是Windows搜索。 Windows Search Wiki

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