【问题标题】:Indexing Service empty filename property索引服务空文件名属性
【发布时间】:2012-01-25 08:57:44
【问题描述】:

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

我的查询是;

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

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

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

谢谢, 迈克

【问题讨论】:

    标签: vb.net indexing-service


    【解决方案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 模板的快速 sn-p。

    <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 来检索内容。

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

    这个link 是可以查询和/或显示的大量属性的好来源。

    【讨论】:

      【解决方案2】:

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

      您不能索引 Internet 信息服务 (IIS) 网站 Windows Server 2008 因为对设计所做的更改 IIS 7.0。

      继任者或索引服务是 Windows Search。 Windows Search Wiki

      看来我必须更改网站才能使用 Windows Search。

      【讨论】:

        猜你喜欢
        • 2011-01-28
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 2011-09-13
        • 2018-11-27
        • 2012-06-24
        • 2014-05-29
        • 1970-01-01
        相关资源
        最近更新 更多