Windows 搜索中的查询进程

您所在的位置:网站首页 windows搜索功能可以按什么搜索 Windows 搜索中的查询进程

Windows 搜索中的查询进程

2023-11-20 17:51| 来源: 网络整理| 查看: 265

Windows 搜索中的查询进程 项目 06/13/2023

本主题的组织方式如下:

关于 Windows 搜索中的查询 本地和远程查询 结构化查询 API 概述 查询方案 条件提取和查询分析 查询索引 相关主题 关于 Windows 搜索中的查询

Windows 搜索中的查询基于以下四种方法:

高级查询语法 (AQS) 自然查询语法 (NQS) 结构化查询语言 (Structured Query Language) (SQL) 结构化查询接口

AQS 是 Windows 搜索用于查询索引以及优化和缩小搜索参数的默认查询语法。 AQS 主要面向用户,用户可以使用 AQS 生成 AQS 查询,但也可供开发人员用于以编程方式生成查询。 在 Windows 7 中,引入了规范 AQS,并且必须用于以编程方式生成 AQS 查询。 在 Windows 7 及更高版本中,可以根据是否满足 AQS 条件提供快捷菜单选项。 有关详细信息,请参阅 创建上下文菜单处理程序中的“使用高级查询语法获取静态谓词的动态行为”。 AQS 查询可以限制为特定类型的文件,称为文件类型。 有关详细信息,请参阅 文件类型和关联。 有关相关属性的参考文档,请参阅 System.Kind 和 System.KindText。

NQS 是一种比 AQS 更宽松的查询语法,类似于人类语言。 如果选择了 NQS 而不是默认的 AQS,则 Windows 搜索可以使用 NQS 来查询索引。

SQL 是一种用于定义查询的文本语言。 SQL 在许多不同的数据库技术中很常见。 Windows 搜索使用 SQL,实现 SQL 的子集,并通过向语言添加元素来扩展 SQL。 Windows 搜索 SQL 扩展了标准 SQL-92 和 SQL-99 数据库查询语法,以增强其基于文本的搜索的有用性。 Windows 搜索 SQL 的所有功能都与 Windows XP 和 Windows Server 2003 及更高版本的 Windows 搜索兼容。 有关 Windows 搜索 SQL 的详细信息,请参阅 使用 Windows 搜索 SQL 语法查询索引和 Windows 搜索 SQL 语法概述。

本主题稍后将介绍结构化查询 API。 有关结构化查询 API 的参考文档,请参阅 查询接口。 ISearchQueryHelper 等接口可帮助从一组输入值构造 SQL 字符串。 此接口将 AQS 用户查询转换为 Windows 搜索 SQL,并指定可在 SQL 中表示但不能在 AQS 中表示的查询限制。 ISearchQueryHelper 还会获取用于连接到 Windows 搜索数据库的 OLE DB 连接字符串。

本地和远程查询

可以在本地或远程执行查询。 以下示例中显示了使用 FROM 子句 的本地查询。 本地查询仅查询本地 SystemIndex 目录。

FROM SystemIndex

以下示例显示了使用 FROM 子句 的远程查询。 添加 ComputerName 会将前面的示例转换为远程查询。

FROM [.]SystemIndex

默认情况下,Windows XP 和 Windows Server 2003 未安装 Windows 搜索。 只有 Windows Search 4 (WS4) 提供远程查询支持。 以前版本的 Windows 桌面搜索 (WDS) (如 3.01 及更早版本)不支持远程查询。 使用 Windows 资源管理器,可以查询远程计算机的本地索引,以查找文件系统项 (由“file:”协议) 处理的项目。

若要通过远程查询检索项,该项必须满足以下要求:

可通过通用命名约定 (UNC) 路径进行访问。 存在于客户端有权访问的远程计算机上。 设置其安全性以允许客户端具有读取访问权限。

Windows 资源管理器具有共享项目的功能,包括 网络和共享中心的“公共”共享 (\\Machine\Public\...) ,以及通过共享向导共享的项目的“用户”共享 (\\Machine\Users\...) 。 在共享文件夹 () 后,可以通过在 FROM 子句中指定远程计算机的计算机名称,并在 SCOPE 子句中指定远程计算机上的 UNC 路径来查询本地索引。 以下示例显示了使用 FROM 和 SCOPE 子句的远程查询。

SELECT System.ItemName FROM MachineName.SystemIndex WHERE SCOPE='file://MachineName/'

此处提供的示例使用 SQL。

结构化查询 API 概述

结构化查询提供通过单个属性的查询的布尔组合来搜索信息的功能。 本主题概述了最重要的结构化查询 API 和方法的功能。 有关结构化查询 API 的参考文档,请参阅 查询接口。

IQueryParser

IQueryParser::P arse 方法分析用户输入字符串,并生成 IQuerySolution 形式的解释。 如果该方法的 pCustomProperties 参数不为 null,则它是 IRichChunk 对象的枚举, (每个识别的自定义属性) 一个。 其他 IQueryParser 方法允许应用程序为各种类型的命名实体设置多个选项,例如区域设置、架构、断字符和处理程序。 IQueryParser::GetSchemaProvider 返回 ISchemaProvider 接口,用于浏览加载的架构。

IQuerySolution: IConditionFactory

IQuerySolution 接口提供有关分析输入字符串的结果的所有信息。 由于 IQuerySolution 也是 IConditionFactory 接口,因此可以创建其他条件树节点。 IQuerySolution::GetQuery 方法为解释生成条件树。 IQuerySolution::GetQuery 还返回语义类型。

IConditionFactory

IConditionFactory 创建条件树节点。 如果 IConditionFactory::MakeNot 的简化参数VARIANT_TRUE,则生成的 ICondition 将得到简化,并且不需要是否定节点。 如果 IConditionFactory::MakeAndOr 的 pSubConditions 参数不为 null,则该参数应是 ICondition 对象的枚举,并成为子树。IConditionFactory::MakeLeaf 使用指定的属性名称、操作和值构造叶节点。 pValueType 参数中的字符串应该是架构中的语义类型的名称。 如果 expand 参数 为VARIANT_TRUE 并且属性是虚拟的,则生成的条件树通常是将 属性扩展到其定义的构成部分而产生的分离。 如果不是 null, pPropertyNameTerm、 pOperatorTerm 和 pValueTerm 参数应标识指示属性、操作和值的术语。

ICondition : IPersistStream

ICondition 接口是条件树中的单个节点。 该节点可以是否定节点、AND 节点、OR 节点或叶节点。 对于非叶节点 ,ICondition::GetSubConditions 返回子树的枚举。 对于叶节点, ICondition 的以下方法返回以下值:

GetComparisonInfo 返回属性名称、操作和值。 GetValueType 返回值的语义类型,该值在 IConditionFactory::MakeLeaf 的 pszValueType 参数中具体化。 GetValueNormalization 返回值的字符串形式。 (如果值已是字符串,则此格式将针对大小写、重音等进行规范化。) GetInputTerms 返回有关输入句子的哪些部分生成了属性名称、操作和值的信息。 克隆 返回条件树的深层副本。 IRichChunk

每个 IRichChunk 对象标识一个令牌范围和一个字符串。 IRichChunk 是一个实用工具接口,表示有关范围的信息 (通常由起始位置和长度标识) 标记范围。 此范围信息包括字符串和/或 VARIANT。

IConditionGenerator

IConditionGenerator 接口由应用程序提供,用于处理命名实体类型的识别和条件树生成。 条件生成器通过 IQueryParser::SetMultiOption 提供给 IQueryParser。 IQueryParser 使用 ISchemaProvider 为当前加载的架构调用 IConditionGenerator::Initialize。 这样做允许 IConditionGenerator 获取所需的任何架构信息。 分析输入字符串时,IQueryParser 调用每个 IConditionGenerator 的 IConditionGenerator::RecognizeNamedEntities 方法,以便报告它在输入字符串中识别的命名实体的出现情况。 IQueryParser 可以使用当前区域设置,并且应使用输入的标记化,因为它需要报告任何命名实体的令牌范围。

当 IQueryParser 即将发出叶节点,并且值的语义类型与 IConditionGenerator 的命名实体类型匹配时, IQueryParser 使用要生成的节点的信息调用 IConditionGenerator::GenerateforLeaf 。 如果 IConditionGenerator 返回S_OK,则它应返回一个条件树 (该树不必是) 叶节点,并通知 IQueryParser 是否抑制它通常生成的替代字符串解释(作为预防措施)。

ITokenCollection

ITokenCollection::NumberOfTokens 方法返回标记数。ITokenCollection::GetToken 返回有关第 i个令牌的信息。 开头和长度是输入字符串中的字符位置。 仅当有文本替代输入字符串中的字符时,返回的文本才为非 null。 例如,当输入字符串中的短划线位于应解释为否定的上下文中时,该短划线用于替代使用 NOT 的短划线。

INamedEntityCollector

IConditionGenerator 为其识别的每个命名实体调用 INamedEntityCollector::Add 。 范围是令牌范围。 它必须始终是 beginSpan ? beginActual



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3