WHERE 子句 (Windows 搜索)
确定文档是否包含在查询返回的结果中的条件由 WHERE 子句指定。 在最高级别,WHERE 子句语法有两个部分:
...WHERE [<group_aliases>] <search_condition>
...WHERE ReuseWhere(<WHEREID>)
子句的可选 <group_alias> 部分通过将别名分配给包含一个或多个列的组来简化复杂的查询。 这可以提高跨 URL 指定的多个列搜索相同信息的复杂查询的可读性。 有关组别名的详细信息,请参阅 WITH -- AS 组别名谓词。
<WHERE 子句的搜索条件>部分是指定搜索匹配条件的一个或多个搜索谓词。 搜索谓词是断言某个值的某些事实的表达式。
搜索条件的结果是布尔值,如果文档满足指定的搜索条件,则为 TRUE ;如果不符合,则为 FALSE 。 如果结果为 TRUE,则返回文档。 如果结果为 FALSE,则不返回文档。 Microsoft Windows 搜索查询中返回的文档根据搜索条件的匹配程度分配排名值。 每个查询搜索条件都可以包含一个 RANKBY 子句,该子句支持修改返回的排名值。
ReuseWhere 函数使使用某些相同搜索条件的多个查询更高效。 查询中的 WHERE 子句指定在查询中匹配的项集。 后续查询可以通过在新查询 WHERE 子句中使用 ReuseWhere 函数来共享为上一个评估执行的工作。
搜索谓词
搜索条件由一个或多个谓词或搜索条件组成,这些谓词或搜索条件描述用户正在搜索的内容 (例如 WHERE System.DateCreated >'2006-04-19') 。 可以使用逻辑运算符 AND、 OR 或 NOT 组合搜索谓词。 可选的一元运算符 NOT 只能与 AND 一起使用,并且只能用于否定谓词或搜索条件的逻辑值。 可以使用括号对逻辑术语进行分组和嵌套。
下表显示了逻辑运算符的优先顺序。
订单 (优先级) | 逻辑运算符 |
---|---|
第一 (最高) | NOT |
Second | AND |
第三 (最低) | OR |
同一类型的逻辑运算符是关联的,并且没有指定的计算顺序。 例如, (A AND B) AND (C AND D) 可以 (A AND D) AND (B AND C) 计算,而逻辑结果没有变化。
重要
错误:WHERE NOT 包含 ('computer')
正确:WHERE 包含 ('software') ,not contains ('computer')
在复杂查询中,你可能希望更强调某些列中的匹配项,而不是其他列中的匹配项。 例如,在搜索讨论“软件设计”的文档时,在文档标题中查找搜索词比在文档文本中查找单个单词更可能匹配。 为了以这种方式影响文档的排名,Microsoft Windows 搜索查询语言支持对搜索条件进行加权。 有关列权重的详细信息,请参阅 CONTAINS 谓词 和 FREETEXT 谓词。
Windows 搜索中有三组搜索谓词:全文搜索、非全文搜索和文件夹深度搜索。 全文搜索谓词通常与内容、标题和其他列的含义匹配,并支持语言匹配 (例如替代词形式、短语和邻近搜索) 。 相比之下,非全文搜索谓词与指定列的值匹配,并且不包含任何特殊的语言处理,但在某些情况下提供基于字符的模式匹配。 文件夹深度谓词将搜索范围限制为指定路径。
注意
如果查询返回文档,因为非全文谓词的计算结果为 TRUE ,则排名值计算为 1000。 使用 排名强制函数 可以修改排名值。
下表描述了全文、非全文和文件夹深度搜索谓词。
全文谓词 | 说明 |
---|---|
CONTAINS | 支持对文档文本列中的术语进行复杂搜索, (例如标题、内容) 。 可以搜索搜索词的转折形式,测试字词的邻近度,并执行逻辑比较。 搜索词可以包含通配符。 |
FREETEXT | 搜索与搜索短语的含义匹配的文档。 相关字词和类似短语将匹配,排名列根据文档与搜索短语的匹配程度计算得出。 搜索词不能包含通配符。 |
非全文谓词 | 说明 |
---|---|
LIKE | 使用与通配符的简单模式匹配来比较列值。 |
文本值比较 | 列值与字符串、日期、时间戳、数值和其他文本值进行比较。 此谓词支持平等和不平等,例如大于和小于。 |
多值 (ARRAY) 比较 | 多值列与文本的多值数组进行比较。 |
NULL | 可以使用 NULL 谓词检测文档未定义的列值。 |
文件夹深度 | 说明 |
---|---|
SCOPE | 对指定路径(包括特定文件夹和所有子文件夹)执行深度遍历。 |
目录 | 对指定路径执行浅表遍历,仅搜索特定文件夹。 |
示例
有关 WHERE 子句的示例,请参阅上表中链接的各个谓词主题。
相关主题
-
参考
-
概念性