operand 是一个字词表达式或其他运算符。
parameter 是可更改运算符行为的值的名称。
value 是用于参数名的值。
运算符名称、参数名和参数文本值都是不区分大小写的。 运算符正文中允许有空格,但除非用引号将空格引起,否则将忽略空格。 FAST 查询语言查询的长度限制为 2,048 个字符。
表 3 列出 FQL 所支持运算符的类型。
表 3. FQL 支持的运算符类型
Description
NEAR 的有序变体,要求各字词按顺序匹配。
ONEAR 运算符可用于将结果集限制为在一定距离内仅N
返回与操作数不匹配的项的项。 操作数可以是任何有效的 FQL expression.one。
只返回至少与一个 OR 操作数匹配的项。 如果与多个 OR 操作数匹配,匹配项的动态排名(结果集中的相关性分数.md)就会升高。
Boolean
PHRASE
只返回与标记的字符串完全匹配的项。
RANGE
启用范围匹配表达式。
RANGE 运算符用于数字和日期/时间托管属性。
Numeric
STARTS-WITH
指定必须在托管属性的开头显示的字词或短语。
STRING
定义文本字符串的布尔值匹配条件。
XRANK
使您能够基于特定字词的出现次数来提升项的动态排名,而无需更改要与查询匹配的项。
XRANK 表达式包含一个必须匹配的组件以及一个或多个只参与动态排名的组件。
示例 1. 下面的表达式匹配其默认全文本索引包含"cat"而非"dog"的项。
andnot(cat, dog)
示例 2. 下面的表达式匹配其默认全文本索引包含“dog”而非“beagle”和“chihuahua”的项。
andnot(dog, beagle, chihuahua)
在 SharePoint 中,ANY 运算符已遭弃用。 请改用 OR 运算符。
与 OR 运算符类似,只是动态排名(结果集中的相关性分数)既不受匹配的操作数的数目影响,也不受项中各字词之间的距离的影响。 操作数可以是一个字词或任何有效的 FQL 子表达式。
此部分查询的动态排名组件以 ANY 表达式内的最佳匹配字词为依据。
与 OR 的区别仅与结果集内的排名有关。 与查询匹配的一组字词的总数相同。
any(operand, operand [,operand]*)
下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。
如果索引同时包含"cat"和"dog",但将"cat"视为是更好的匹配项,则"项"的动态排名将基于"cat",而不会考虑"dog"。
any(cat, dog)
COUNT
指定将项必须包含的查询词的出现次数作为结果返回。 操作数可以是一个查询词、一个短语或一个通配符查询词。
property-spec:count(operand [,from=<numeric value>, to=<numeric value>])
Description
示例 1. 下面的表达式至少与单词"cat"匹配了 5 次。
count(cat, from=5)
示例 2. 下面的表达式至少与单词"cat"匹配了 5 次,但匹配次数不会大于或等于 10。
count(cat, from=5, to=10)
示例 3. 下面的每个表达式至少与单词"cat"或"dog"中的任意一个匹配了 3 次。
count(or(cat, dog), from=3)count(string("cat dog", mode="or"), from=3)
下表包含托管属性字符串值的示例,并指明它们是否匹配示例 3 中的两个表达式。
是否匹配?
DATETIME
提供日期/时间数值的显式键入。 此操作数是一个日期/时间字符串,其格式是按 FQL 中的标记表达式中指定的语法设置的。
显式类型转换是可选的,通常不需要。 根据目标数字托管属性的类型检测查询词的类型。
datetime(<date/time string>)
DECIMAL
提供小数值的显示键入。 依据 FQL 中的标记表达式中指定的语法,此操作数是一个小数值。
显式类型转换是可选的,通常不需要。 根据目标数字托管属性的类型检测查询词的类型。
decimal(<decimal point value>)
ENDS-WITH
指定必须在托管属性的末尾显示的单词或短语(边界匹配)。
数字托管属性不支持边界匹配。 数字托管属性总是遵循完全匹配或值范围匹配。
一些应用程序可能需要您能够执行托管属性的完全匹配。 例如,有这样一个 product name 托管属性,其中一个产品的全名是另一个产品名的子字符串。
ends-with(<term or phrase>)
下面的表达式匹配其"author"托管属性中包含"Mr Adam Jones"和"Adam Jones"值的项。 此表达式与带“Adam Jones sr”值的项不匹配。
author:ends-with("adam jones")
可对托管属性的所有文本应用边界匹配,也可对包含字符串值列表(例如,名称列表)的托管属性中的单个字符串应用边界匹配。 在此情况下,您可能需要准确匹配每个字符串的内容,并避免执行跨字符串边界的查询匹配。
若要应用边界匹配查询,您必须在索引架构中配置相关的托管属性。
通过启用托管属性的边界匹配功能,可执行以下操作:
使用显式边界匹配查询。
禁止短语跨字符串边界进行匹配。 对于包含多个字符串的托管属性,此功能将确保字符串不与边界指示之前或之后的单词匹配。
EQUALS
指定字词或短语必须提供与托管属性的准确标记匹配。
equals(<term or phrase>)
下面的示例将匹配其"author"托管属性中包含"Adam Jones"值的项。 该示例不匹配带“Adam Jones sr”或“Mr Adam Jones”值的项。
author:equals("adam jones")
另请参阅 ENDS-WITH。
FILTER
用于查询元数据或其他结构化数据。
一旦使用 FILTER 运算符,即自动表明指定查询的以下内容:
语言将设置为 linguistics="OFF"。
排名将被禁用。
在查询结果命中突出显示项摘要中,不会突出显示任何查询。
提示:如果在 FILTER 表达式内使用 STRING 运算符,语言默认处于禁用状态。 可以使用操作数 linguistics="ON"
,在 FILTER 内的每个 STRING 表达式中启用语言处理。
filter(<any valid FQL operator expression>)
下面的表达式匹配具有一个包含"sonata"的 Title 托管属性和一个仅包含"audio"标记的 Doctype 托管属性的项。 将不会对"audio"执行任何语言匹配。 由于 FILTER 标记将用于匹配"audio",因此该文本将不会在命中突出显示摘要中突出显示。
and(title:sonata, filter(doctype:equals("audio")))
如果必须将您的查询限制为与数字属性中的一大组整数值中的至少一个整数值匹配,则可按照两种在功能上等效的方法来表达此查询:
and(string("hello world"), filter(property-spec:or(1, 20, 453, ... , 3473)))
and(string("hello world"), filter(property-spec:int("1 20 453 ... 3473", mode="or")))
第二个示例通过将字符串与包含在双引号中的一组数值一起使用,来使用 INT 运算符。 这将在筛选一大组数值时大大提高查询性能。
如果必须筛选一大组值,则应考虑使用数值而不是字符串值,并通过使用优化语法表达查询。
FLOAT
提供浮点数值的显式键入。 依据 FQL 中的标记表达式中指定的语法,此操作数是一个浮点值。
显式类型转换是可选的,通常不需要。 根据目标数字托管属性的类型检测查询词的类型。
float(<floating point value>)
提供整数值的显式键入。 依据 FQL 中的标记表达式中指定的语法,此操作数是一个整数值。
显式类型转换是可选的,通常不需要。 根据目标数字托管属性的类型检测查询词的类型。
INT 运算符还可用于将一组整数值表示为 FQL 布尔运算符的参数。 这将能够采用在性能上有效的方式在查询中提供一组整数值,因为 FQL 查询分析程序不解析通过使用 INT 运算符传递的值,而是直接将这些值传递到查询匹配组件。
int(<integer value>)
int("value, value, ??? , value")
第一个语法指定一个整数。 第二个语法指定括在双引号中的以逗号分隔的整数值列表。
如果需要将您的查询限制为与数字属性中的一大组整数值中的至少一个整数值匹配,可通过使用 INT 运算符来表达此查询:
and(string("hello world"), filter(id:int("1 20 49 124 453 985 3473", mode="or")))
将结果集限制为相互之间的特定距离内有 N 个字词的项。
查询词的顺序对于匹配并不重要,而只对距离重要。
可将任意数量的字词与 NEAR 运算符结合使用。
NEAR 操作数可以是单个字词、短语或 OR 或 ANY 布尔运算符表达式。 通配符是可以接受的。
如果 NEAR 运算符的多个操作数与同一个索引标记匹配,则将这些操作数视为彼此相邻。
near(arg, arg [, arg]* [, N=<numeric value>])
Description
示例 1. 下面的表达式匹配同时包含"cat"和"dog"的字符串(如果分隔它们的索引标记不超过 4 个(默认值))。
near(cat, dog)
示例 2. 下面的表达式匹配同时包含"cat"、"dog"、"fox"和"wolf"的字符串(如果分隔它们的索引标记不超过 4 个)。
near(cat, dog, fox, wolf)
下表包含托管属性字符串值的示例,并指明它们是否匹配示例 2 中前面的表达式。
是否匹配?
NEAR/ONEAR 字词距离注意事项
N 指示在项的匹配段内查询词之间允许显示的单词的最大数目。 如果 NEAR 或 ONEAR 包含两个以上的操作数,则在与所有 NEAR 或 ONEAR 字词匹配的项部分内计算查询词之间允许的最大单词数 ( N)。
对词汇切分文本使用 NEAR 或 ONEAR 。 这意味着特殊字符,如逗号 ( “,” ) ,句点 ( ”。 “) ,冒号 (” : “) 或分号 (” ; “) 将被视为空白。 字词"distance"与索引文本中的标记相关。
如果使用操作数相等的 ONEAR 或 NEAR,则运算符将按如下方式工作:
near(a, a, n=x)
如果上下文中至少显示一个" "实例,则此查询将始终返回 a
。 这还表示 NEAR 不能用作 COUNT 运算符。 有关计算字词出现次数的详细信息,请参阅 COUNT 运算符。
应用于短语的 NEAR 还将与文本中的重叠短语匹配。
如果匹配段中的标记与 NEAR 或 ONEAR 表达式的多个操作数匹配,则查询可以匹配,即使匹配段内的未匹配标记的数目超过了 NEAR 或 ONEAR 运算符表达式中的" N"值也是如此。 例如,重叠可以为重叠短语。 如果标记重叠匹配项的数目为" O
",则查询将匹配(如果项的匹配段中仅显示" N+O
"个未匹配标记)。
使用 NOT 的 NEAR 或 ONEAR
NEAR 或 ONEAR 运算符内不能使用 NOT 运算符。 以下是错误的 FQL 语法:
near(audi,not(bmw),n=2)
只返回不匹配操作数的项。 操作数可以是任何有效的 FQL 表达式。
not(operand)
ONEAR
NEAR 的有序变体,要求各字词按顺序匹配。
ONEAR 运算符可用于将结果集限制为相互之间的特定距离内有 N 个字词的项。
onear(arg, arg [, arg]* [, N=<numeric value>])
Description
示例 1. 下面的表达式与依次出现的所有的"cat"、"dog"、"fox"和"wolf"单词匹配(如果分隔它们的索引标记不超过 4 个)。
onear(cat, dog, fox, wolf)
下表包含托管属性字符串值的示例,并指明它们是否匹配上一个表达式。
是否匹配?
示例 2. 下面的表达式(使用词干分解)与上表中第二行中的文本匹配。
onear(dog, fox, wolf, cat, N=5)
示例 3. 下面的表达式与上表中第一行和第三行的文本匹配。
onear(cat, dog, fox, wolf, N=5)
另请参阅 NEAR。
只返回至少与一个 OR 操作数匹配的项。 如果与多个 OR 操作数匹配,则匹配的项将得到较高的动态排名(结果集中的相关性分数)。 操作数可以是一个字词或任何有效的 FQL 子表达式。
or(operand, operand [,operand]*)
下面的表达式与其默认全文本索引包含"cat"或"dog"的所有项匹配。 如果项的默认全文本索引包含“cat”和“dog”,则将匹配该项,如果该项仅包含这些标记之一,则其动态排名将高于预期排名。
or(cat, dog)
PHRASE
搜索标记的完整字符串。
PHRASE 操作数可以是一个字词。 通配符是可以接受的。
phrase(term [, term]*)
另请参阅 STRING。
RANGE
将 RANGE 运算符用于数字和日期/时间托管属性。 此运算符支持范围匹配表达式。
range(start, stop [,from="GE"|"GT"] [,to="LE"|"LT"])
下面的表达式在项中匹配以短语“big accomplishments”开头的说明属性(大小至少为 10,000 个字节)。
and(size:range(10000, max), description:starts-with("big accomplishments"))
STARTS-WITH
指定一个必须显示在托管属性开头的单词或短语。
starts-with(<term or phrase>)
下面的表达式将与其 author 托管属性中包含"Adam Jones sr"和"Adam Jones"值的项匹配。 此表达式与带"Mr Adam Jones"值的项不匹配。
author:starts-with("adam jones")
有关边界匹配的其他备注,请参阅 ENDS-WITH。
STRING
定义文本字符串的布尔匹配条件。
此操作数是一个要匹配的文本字符串(一个或多个字词)。 该字符串后跟零个或多个参数。
STRING 运算符还可用作类型转换。 例如,查询 string("24.5")
会将数值"24.5"视为一个文本字符串。
string("<text string>"
[, mode=<mode>]
[, n=<near>]
[, weight=<n>]
[, linguistics=<on|off>]
[, wildcard=<on|off>])
Description
"PHRASE" phrase(term [,term]*)
"AND" and(term, term [,term]*)
"OR" or(term, term [,term]*)
"ANY" any(term, term [,term]*)
"NEAR" near(term, term [,term]*, N)
"ONEAR" onear(term, term [,term]*, N)
默认值:"PHRASE"
<numeric_value>
此参数指明了 mode= "NEAR" 或 mode= "ONEAR" 的最大字词距离。 以下表达式等效: string("hello world", mode="NEAR", n=5)
near(hello, world, n=5)
默认值: 4
weight
<numeric_value>
此参数是一个正数,用于指明动态排名的字词权重。 较低的值指示一个字词应较少地参与排名。 较高的值指示一个字词应较多地参与排名。 weight 参数的值为零指定字词将不会影响动态排名。
weight 参数适用于 STRING 表达式中的所有字词。
提示:weight 参数只会影响全文检索查询。 默认值:100。
linguistics
on|off
禁用/启用字符串的所有语言功能(词形还原、同义词、拼写检查),前提是已为查询启用这些功能。 在您仍希望给定字词或字符串参与排名时,可使用此参数关闭针对该字词或字符串的语言处理。 默认值:"ON"
wildcard
on|off
此参数控制<文本字符串>内的字词通配符扩展。 此设置重写了查询参数中的任何通配符设置,并支持对查询的特定部分启用或禁用扩展的通配符。 有效值如下:-
“ON” 指定将字符“*”计算为通配符。 “*”字符与零个或多个字符匹配。
-
“OFF” 指定不将字符“*”计算为通配符。
默认值:"ON"
示例 1. 由于默认字符串模式为" PHRASE ",因此下面的每个表达式都返回相同结果。
"what light through yonder window breaks"string("what light through yonder window breaks")string("what light through yonder window breaks", mode="phrase")phrase(what, light, through, yonder, window, breaks)
示例 2. 下面的字符串标记表达式和 AND 运算符表达式返回相同的结果。
string("cat dog fox", mode="and")and(cat, dog, fox)
示例 3. 下面的字符串标记表达式和 OR 运算符表达式返回相同的结果。
string("coyote saguaro", mode="or")or(coyote, saguaro)
示例 4. 下面的字符串标记表达式和 ANY 运算符表达式返回相同的结果。
string("coyote saguaro", mode="any")any(coyote, saguaro)
示例 5. 下面的字符串标记表达式和 NEAR 运算符表达式返回相同的结果。
string("coyote saguaro", mode="near")near(coyote, saguaro)
示例 6. 下面的字符串标记表达式和 NEAR 运算符表达式返回相同的结果。
string("cat dog fox wolf", mode="near", N=4)near(cat, dog, fox, wolf, N=4)
示例 7. 下面的字符串标记表达式和 ONEAR 运算符表达式返回相同的结果。
string("cat dog fox wolf", mode="onear")onear(cat, dog, fox, wolf)
示例 8. 下面的字符串标记表达式匹配已禁用语言功能的单词"nobler",因此不使用词干分解来匹配该单词的其他形式(如"ennobling")。
string("nobler", linguistics="off")
示例 9. 下面的表达式匹配包含"cat"或"dog"的项,但此表达式对包含"dog"的项的动态排名的提升程度高于比对包含"cat"的项的动态排名的提升程度。
or(string("cat", weight="200"), string("dog", weight="500"))
动态排名的相关性权重
weight 参数主要对 OR 查询起作用。 它还对 AND 查询起到一些作用。 动态排名算法可以表示,不同的字词提供不同的排名参与,具体取决于字词匹配在项中出现的位置。
排名参与中的差异还可基于字词频率和反转项频率。 示例如下:
查询: and(string("a"), string("b", weight=200))
索引架构: title 托管属性的权重大于 body 托管属性的权重。
索引项 1 在 title 中包含字词"a",在 body 中包含字词"b"。
索引项 2 在 body 中包含字词"a",在 title 中包含字词"b"。
在此示例中,项 2 将获得最高总排名,因为具有更高动态排名参与的项将获得更多提升。
提示:相对字词提升(正或负)适用于总排名的动态排名组件。 不过,邻近度提升(词间距离)排名计算不受字词权重影响。 相对权重并不总是意味着要根据给定百分比修改项的总排名。
> 以下查询将搜索字词“peter”、“paul”或“mary”,其中“peter”的排名贡献是其他两个字词的两倍。 > or(peter, string("paul mary", mode="OR", weight=50))
处理含特殊字符的字符串
在用双引号引起的字符串表达式中,将特殊字符视为空格,如逗号(",")、分号(";")、冒号(":")、句号(".")、减号("-")、下划线字符("_")或左斜线("/")。 这与词汇切分过程有关。 这些字符还表示由其分隔的标记的隐式短语划分。
下列查询表达式是等效的。
title:string("animals birds", mode="phrase")title:"animals/birds"title:string("animals/birds", mode="and")title:string("animals/birds", mode="or")
下列查询表达式是等效的。
title:or(string("animals birds", mode="phrase"), string("animals insects", mode="phrase"))title:string("animals/birds animals/insects", mode="or")
下列查询表达式是等效的。
body:string("help contoso com", mode="phrase")body:string("[email protected]")
词汇切分短语匹配
可以使用含 mode="phrase" 的 STRING 运算符或 PHRASE 运算符,精确搜索词汇切分字符串。
所有此类短语操作都暗示词汇切分短语匹配。 这意味着特殊字符将视为空格,如逗号(" , ")、分号(" ; ")、冒号(" : ")、下划线字符(" _ ")、减号(" - ")或左斜线(" / ")。 这与词汇切分过程相关。
XRANK
基于特定字词在 match expression 中出现的次数来提升项的动态排名,而无需更改要与查询匹配的项。
XRANK 表达式包含一个必须匹配的组件(即 match expression)以及一个或多个仅对动态排名产生作用的组件(即 rank expression)。 必须为有效的 XRANK 表达式指定至少 1 个参数(不包括 n)。
Match expressions 可能是任何有效的 FQL 表达式,包括嵌套的 XRANK 表达式。
Rank expressions 可能是任何没有 XRANK 表达式的有效 FQL 表达式。 如果您的 FQL 查询具有多个 XRANK 运算符,则最终的动态排名值将按所有 XRANK 运算符的提升值总和计算。
在 SharePoint Server 2010 中,XRANK 运算符有两个参数(boost 和 boostall)和语法 xrank(operand, rank-operand [, rank-operand]* [,boost=n] [,boostall=yes])
。 SharePoint 已弃用此语法及其参数。 建议改用新语法和参数。
xrank(<match expression> [, <rank-expression>]*, rank-parameter[, rank-parameter]*)
示例 1. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。 此表达式会提升还包含"thoroughbred"且恒定提高 100 的项的动态排名。
xrank(or(cat, dog), thoroughbred, cb=100)
示例 2. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。 此表达式会提升还包含"thoroughbred"且归一化提高 1.5 的项的动态排名。
xrank(or(cat, dog), thoroughbred, nb=1.5)
示例 3. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。 此表达式会提升还包含"thoroughbred"且恒定提高 100,归一化提高 1.5 的项的动太排名。
xrank(or(cat, dog), thoroughbred, cb=100, nb=1.5)
示例 4. 以下表达式将与所有包含字词"动物"的项匹配,并将提升动态排名,如下所示:
包含字词"狗"的项的动态排名提升了 100 点。
包含字词"猫"的项的动态排名提升了 200 点。
包含字词"狗"和"猫"的项的动态排名提升了 300 点。
xrank(xrank(animals, dogs, cb=100), cats, cb=200)
在 SharePoint 中生成搜索查询