通過SQL Server查詢Index Server
如果要通過SQL Server查詢Index Server,須使用OPENQUERY函數。其語法結構如下。
OPENQUERY(linked_server, 'query')
其中linked_server參數為連接的名稱。而query參數為要進行的查詢,它將以一個字符串的形式傳送給OPENQUERY函數。此函數返回的將是一個虛擬表,從而可以讓我們對其做進一步的查詢。
下面的語句查找內容包含中SQL這個單詞的所有文件:
SELECT *
FROM OpenQuery(FileSystem,
'SELECT Directory, FileName, DocAuthor, Size, Create
FROM SCOPE()
WHERE CONTAINS( Contents, ''SQL'' ) ' )
對於Index Server的查詢,其FROM語句的語法格式於普通的SQL語句是有所區別的。其語法結構如下:
FROM [ Catalog_Name.. ] { SCOPE( [ 'Scope_Arguments' ] ) }
其中的Catalog_Name參數用於指明要進行查詢的索引目錄。由於我們在定義連接時只能選擇一個索引目錄,所以此參數在此將被省略。而SCOPE函數用於指明要進行查詢的文件所在的目錄。SCOPE函數的語法結構如下圖所示。
其中DEEP TRAVERSAL OF關鍵字指明將查詢目錄中所有的文件,包括其子目錄中的所有文件。而SHALLOW TRAVERSAL OF關鍵字則指明只查詢頂級目錄中的文件,而不包括子目錄中的那些文件。如果不指明查詢的目錄深度,則默認為DEEP TRAVERSAL OF。
physical_path和virtual_directory分別為物理目錄和虛擬目錄。其中各自的含義在圖中已經標示的非常明白了,在此就不再進一步說明了。
Index Server共支持50種文件屬性,而可以用來作為查詢條件或返回結果的常用文件屬性:
屬性名稱 數據類型 注釋 可否用於ORDER BY子句 可否用於SELECT語句中
Access datetime 文件的最後訪問時間。 可 可
Characterization nvarchar或ntext 文檔的描述或摘要,由Index Server使用。 否 可
Create datetime 文件的創建時間。 可 可
Directory Nvarchar 文件的物理路徑,不包含文件名。 可 可
DocAppName nvarchar 創建文件的應用程序的名稱。如Microsoft Word 9.0。 可 可
DocAuthor nvarchar 文檔的作者。 可 可
DocComments nvarchar 關於文檔的注釋。 可 可
DocCompany nvarchar 寫作文檔的公司的名稱。 可 可
DocLastAuthor nvarchar 最近編輯文檔的用戶。 可 可
DocLastPrinted datetime 文檔的最近一次打印時間。 可 否
DocPageCount integer 文檔的頁數。 可 否
DocParaCount integer 文檔的圖形數量。 可 否
DocRevNumber integer 文檔的當前版本。 可 可
DocSubject nvarchar 文檔的主題。 可 可
DocTemplate nvarchar 文檔的模板。 可 可
DocTitle nvarchar 文檔的標題。 可 可
DocWordCount integer 文檔的字數。 可 否
FileIndex Decimal(19,0) 文件的唯一標識。 可 可
FileName nvarchar 文件名。 可 可
HitCount integer 文件中的命中次數(單詞匹配查詢)。即文件中有多少個查詢條件中的單詞。 可 可
Path nvarchar 文件的物理路徑,包含文件名。 可 可
Rank integer 行的等級,范圍從 0 到 1000,數字越大表示越匹配。 可 可
ShortFileName nvarchar 短文件名(8.3格式)。 可 可
Size Decimal(19,0) 文件大小,單位是字節。 可 可
VPath nvarchar 指向文件的完整虛擬路徑,包括文件名。如果有多個可能的路徑,將選擇最符合查詢的一個。 可 可
Write datetime 最近一次寫文件的時間。 可 可
可以在Where子句中使用以上各種屬性作為查詢的條件。