企业级搜索 SQL 语法中的 WHERE 子句
用于指定条件,这些条件决定是否在查询返回的结果中包含某个文档。
…WHERE [<group_aliases>] <search_condition>
Remarks
在最高级别,WHERE 子句语法有两个部分,他们分别是要搜索的列和搜索条件。
若要简化复杂查询,可对包含一个或多个列的组指定一个别名。有关组别名的详细信息,请参阅 企业级搜索 SQL 语法中的 WITH -- AS 组别名谓词。
WHERE 子句的搜索条件部分指定了搜索的匹配条件。如果文档满足查询指定的比较和逻辑组合,则返回文档。搜索条件的结果是一个布尔值,TRUE 或 FALSE。若结果为 TRUE,则包含文档。若结果为 FALSE,则不包含文档。
将根据企业级搜索查询中所返回的文档与搜索条件的匹配程度来指定他们的级别值。
指定搜索范围
您可以在 WHERE 子句指定的搜索条件中,指示搜索结果是否包含特定搜索范围中的内容。具体语法如下:
…FROM scope() WHERE "scope"=<search scope name>…
例如:
SELECT title, author, rank FROM scope() WHERE "scope"='All Sites'
搜索谓词
搜索谓词是声明有关某些值的事实的表达式。符合谓词要求的文档具有谓词中所指定属性的相应值。
搜索条件包含一个或多个谓词或搜索条件,他们通过逻辑运算符 AND、OR 或 AND NOT 进行组合。可选的一元运算符 NOT 可用于对谓词或搜索条件的逻辑值求反。您可以使用括号来组合并嵌套逻辑词。
下表显示了逻辑运算符的优先级顺序。
顺序(优先级) |
逻辑运算符 |
---|---|
一级(最高级) |
NOT |
二级 |
AND |
三级(最低级) |
OR |
相同类型的逻辑运算符是关联的,并且没有特定的计算顺序。例如,(A AND B) AND (C AND D) 可转化为 (B AND C) AND (A AND D) 进行计算,而逻辑结果并无任何变化。
备注
如果谓词是 WHERE 子句中的第一个谓词,则您不能对 CONTAINS 谓词或 FREETEXT 谓词应用一元逻辑运算符 NOT。例如,不接受
WHERE NOT CONTAINS ('computer')
;但接受
WHERE CONTAINS ('software') AND NOT CONTAINS ('computer')
。
在复杂查询中,您可能要重点突出某些列中的匹配。例如,搜索有关“软件设计”的文档时,在文档标题中查找该搜索词会比在文档文本中查找单个单词得到的匹配结果更为有效。SQL 支持对搜索条件赋予权重,从而影响文档的级别。有关列权重的详细信息,请参阅企业级搜索 SQL 语法中的 CONTAINS 谓词和企业级搜索 SQL 语法中的 FREETEXT 谓词。
企业级搜索中有两组搜索谓词。全文搜索谓词通常与内容、标题和其他列的含义匹配,并支持语言匹配(如单词的其他形式、短语、邻近搜索)。相反地,非全文搜索谓词与指定列的值相匹配,并且不包含任何特殊的语言处理,但在一些情况下会提供基于字符的模式匹配。
备注
如果查询因文档非全文搜索谓词的计算结果为 TRUE 而返回文档,则级别值的计算结果为 1000。
下表介绍了全文和非全文搜索谓词。
全文搜索谓词 |
说明 |
---|---|
CONTAINS |
支持对文档文本列中的词进行复杂搜索(如标题、内容)。可搜索搜索词的词尾变化形式,测试词语的邻近程度,并执行逻辑比较。搜索词中可包含通配符。 |
FREETEXT |
搜索与搜索短语含义匹配的文档。将匹配相关单词及类似的短语,并根据文档与搜索短语的匹配程度计算级别列。搜索词中不能包含通配符字符。 |
非全文搜索谓词 |
说明 |
---|---|
LIKE |
通过使用与通配符匹配的简单模式来比较列值。 |
文字值比较 |
将列值与字符串、日期、时间戳、数字和其他文字值进行比较。此谓词支持等式或不等式,如大于或小于。 |
多值 (ARRAY) 比较 |
将多值列与多值文字数组进行比较。 |
NULL |
通过使用 NULL 谓词可检测到没有为文档定义的列值。 |
本节内容
企业级搜索 SQL 语法中的 WITH -- AS 组别名谓词