65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 索引服务基础知识

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (5投票s)

2009年2月18日

CPOL

5分钟阅读

viewsIcon

37679

downloadIcon

452

本文介绍了如何管理和使用 Windows 索引服务。

引言

在我为一款杀毒软件(大学项目)创建病毒扫描器时,我遇到了一个困难的局面,即在本地驱动器上搜索文件既困难又耗时。于是,我开始在互联网上寻找更好的文件搜索技术。然后,我了解到 Windows 索引服务。索引服务还可以用于在网站上提供搜索功能。

什么是 Windows 索引服务?

Windows 索引服务是 Windows NT、Windows 2000 及其他 Windows NT 系列操作系统中的一个出色工具。正如 MSDN 所述,“索引服务是 Microsoft® Windows® 2000 或更高版本的一个基础服务,它能从文件中提取内容并构建一个索引目录,以实现高效快速的搜索。”借助索引服务,我们可以搜索本地主机和远程网络主机上的文件内容和属性。索引服务使用过滤器从文件中提取内容。每种文件格式都有其不同的过滤器。幸运的是,Microsoft 提供了 Microsoft Office 文件、超文本标记语言 (HTML) 文件、多用途互联网邮件扩展 (MIME) 消息和纯文本文件的过滤器。如果我们想从任何其他格式中提取信息,那么我们就需要一个过滤器;例如,对于 PDF 文件,我们需要 Adobe PDF Ifilter(如果您确实需要,可以从这里下载 Ifilter)。

什么是目录?

索引服务将所有关于文件的索引信息存储在目录中。默认情况下,当我们安装索引服务时,会自动创建一个名为“系统目录”的目录。如果安装了 Internet Information Services (IIS),则还有一个名为“Web 目录”的目录。系统目录包含对所有永久连接的磁盘驱动器上的所有文档的索引,但某些系统文件和临时文件除外。Web 目录包含 Internet Information Services (IIS) 的索引。

什么是范围?

创建目录后,我们将目录添加到目录中——这称为范围。索引服务将仅索引我们添加到目录中的那些目录和驱动器。

如何管理索引服务?

随着索引服务 3.0 的发布,我们可以使用多种编程语言和脚本语言执行与文件系统相关的任务。.NET 开发人员应注意,.NET 本身不支持访问索引服务。因此,他们需要扩展其 .NET 应用程序以与 WMI 或 COM 进行交互来管理/访问索引服务。在本文中,我们将使用 VBS 来管理和查询索引服务。为此,我们将使用以下类型的 API:

  1. 管理助手
  2. 查询助手

这些 API 在三个类中可用:AdminIndexServerCatAdmScopeAdm,它们声明在 CIODMLib 库中,因此我们将使用 CreateObject 函数来访问这些类。

Set objISAdm = CreateObject("Microsoft.ISAdm") 

启动/停止索引服务

要启动索引服务,我们使用 AdminIndexServerStart 方法,要停止,我们使用 Stop 方法。我们还可以使用 Pause 方法暂停服务。

Set objISAdm = CreateObject("Microsoft.ISAdm")
objISAdm.start()

要检查服务是否正在运行或已暂停,请使用 IsRunningIsPaused 方法。

Set objISAdm = CreateObject("Microsoft.ISAdm")
If objISAdm.IsRunning= False then
    objISAdm.start()
end if

添加目录

如果您想创建一个新目录,请使用 AddCatalog 方法。

Function AddCatalog(bstrCatName As String, bstrCatLocation As String) As Object

我们必须传递两个字符串参数:目录的名称以及保存目录的路径。请注意,在重新启动索引服务之前,目录将保持离线状态。因此,最佳方法是先停止索引服务,添加目录,然后再次启动索引服务。如下所示:

Set objISAdm = CreateObject("Microsoft.ISAdm")
objISAdm.stop()
Set objCatalog = objISAdm.AddCatalog("MyCatalog","c:\Mycatalog”)
objISAdm.start()

添加索引服务范围

如上所述,索引服务将仅索引我们添加到目录中的那些目录和驱动器。所以在这里,我们将使用 AdminIndexServer 对象的 GetCatalogByName 方法获取 Catalog 对象,然后使用 Catalog 对象的 AddScope 方法将一个范围添加到我们的“My_Catalog”目录中,如下所示:

Set objISAdm = CreateObject("Microsoft.ISAdm")
Set objCatalog = objISAdm. GetCatalogByName(“MyCatatlog”)
Set objScope= objCatalog.AddScope(“C:\myfiles”,False)
objScope.Alias = "MyCatalogScope"

AddScope 方法接受四个参数:

  • strScopePath - 必需。要创建的范围路径。
  • blnExclude - 必需。如果为 TRUE,则从索引中排除此范围。如果为 FALSE,则为此范围启用索引。
  • vtLogon - 可选。表示登录名的字符串。
  • vtPassword - 可选。表示登录密码的字符串。

如果范围路径是 UNC 路径,则 vtLogonvtPassword 都是必需的。Alias 属性是此范围的别名或友好名称的(不区分大小写)名称。此属性是读/写。

查询索引服务器目录

使用查询,我们可以找到内容中包含单词和短语的文件,或者查找其属性(如文档名称或作者)的文件。最简单的查询类型是单个单词。例如,如果您搜索“programs”,索引服务将返回在内容中包含“programs”一词的所有文档。有五种查询类型:

自由文本和短语查询

通过自由文本和短语查询,我们可以搜索包含一组单词或完整句子的文件。索引服务会查找与自由文本和短语查询中的单词和短语最匹配的页面。

模式匹配查询

在模式匹配查询中,我们可以使用通配符和正则表达式。例如,“@filename=*.doc”将搜索所有扩展名为“doc”的文件。

向量空间查询

在向量空间查询中,我们分配权重因子来控制术语的相对重要性。

查询索引服务器目录的示例

set q = WScript.CreateObject( "ixsso.Query" )
q.Query = "@filename= *.vbs"
q.Catalog = "query://./SYSTEM"

q.AllowEnumeration =False
q.Dialect = 2
q.Columns = "FileName"
set rs = q.CreateRecordSet( "sequential" )

Do Until rs.EOF
    msgbox(rs("FileName"))
    rs.MoveNext
Loop

在此示例中,我们搜索所有扩展名为“vbs”的文件。我们在这里使用了“SYSTEM”目录。

摘要

索引服务是 Windows 操作系统中的一项强大功能。此外,它免费、易于使用且非常灵活。它可用于 Web 和桌面应用程序。我希望本文能帮助您理解索引服务并更好地使用它。

参考文献

© . All rights reserved.