2011-12-21 30 views
0

我第一次使用Windows索引服務,我需要從查詢中返回doctitle和文件名。索引服務空文件名屬性

我的查詢是;

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

我設置了一個相當基本的目錄,只是指向一個文件夾。我從網站使用此代碼,這些文件位於本地計算機上,身份驗證不應該成爲問題。

我的搜索返回的結果,但沒有在文件名屬性。該doctitle填充,但沒有別的。

謝謝, 邁克

回答

0

我發現本文中的答案; http://support.microsoft.com/kb/954822

你不能索引Internet信息服務(IIS)網站中 Windows Server 2008中,因爲這是對 所做的設計變更網站IIS 7.0。

後續程序或索引服務是Windows搜索。 Windows Search Wiki

看起來像我將不得不改變網站使用Windows搜索。

1

我知道這已經過了幾個月,因爲這已經得到了解答,但我目前在Windows Server 2008 R2上使用WIS使用WIS,並在搜索中遇到了這個問題。有時我不能拒絕回答,所以我搜索了互聯網並提出了這個解決方案。

我敢肯定,你可以將代碼轉換必要的,但...

你必須安裝在服務器管理器的角色在Windows Server 2003文件服務索引服務。

對於目錄屬性,我禁用了可繼承設置並適當地設置了WWW服務器。我還生成了250個字符摘要以存儲在特徵欄中。

當我建立了我的目錄,我包括/我的網站的目錄中排除某些文件夾(包括站點根目錄),當我問它,我用下面的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是一個很好的來源,可以查詢和/或顯示大量屬性。