FAST 查询语言 (FQL) 运算符

上次修改时间: 2015年3月9日

适用范围: SharePoint Server 2010

本文内容
FQL 运算符概述
AND
ANDNOT
ANY
COUNT
DATETIME
ENDS-WITH
EQUALS
FILTER
FLOAT
INT
NEAR
NOT
ONEAR
OR
PHRASE
RANGE
RANK
STARTS-WITH
STRING
XRANK

FAST 查询语言 (FQL) 运算符是一些关键字,它们指定布尔运算或对操作数的其他限制。FQL 运算符语法如下所示:

[property-spec:]operator(operand [,operand]* [, parameter="value"]*)

在此语法中:

  • property-spec 是后跟"in"运算符的可选属性规范。

  • operator 是指定要执行的运算的关键字。

  • operand 是一个字词表达式或其他运算符。

  • parameter 是可更改运算符行为的值的名称。

  • value 是用于参数名的值。

运算符名称、参数名和参数文本值都是不区分大小写的。运算符正文中允许有空格,但除非用引号将空格引起,否则将忽略空格。

FQL 运算符概述

FQL 支持以下类型的运算符:

类型

说明

运算符

字符串

允许您指定针对字词字符串的查询操作。这是最常用于文本字词的运算符。

STRING

布尔值

允许您在查询中组合字词和子表达式。

ANDORANYANDNOTNOTCOUNT

近似

允许您指定文本的匹配序列中的查询字词的近似度。

NEARONEARPHRASESTARTS-WITHENDS-WITHEQUALS

数字

允许您指定查询中的数字条件。

RANGEINTFLOATDATETIME

相关性

允许您影响查询的相关性评估。

RANKXRANKFILTER

下表提供支持的运算符的列表。

运算符

说明

类型

AND

只返回匹配所有 AND 操作数的项。

布尔值

ANDNOT

只返回匹配第一个操作数但不匹配后续操作数的项。

布尔值

ANY

OR 运算符类似,只是动态排名(结果集中的相关性分数)既不受匹配的操作数的数目影响,也不受项中各字词之间的距离的影响。

布尔值

COUNT

用于指定查询词在某个项中要出现多少次才能作为结果返回。操作数可以是一个查询词、一个短语或通配符查询词。

布尔值

DATETIME

提供数字值的显式键入。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

数字

ENDS-WITH

指定必须在托管属性末尾显示的字词或短语。

近似

EQUALS

指定字词或短语必须提供与托管属性的准确标记匹配。

近似

FILTER

用于查询元数据或其他结构化数据。

相关性

FLOAT

提供数字值的显式键入。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

数字

INT

提供数字值的显式键入。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

数字

NEAR

将结果集限制为相互之间的特定距离内有 N 个字词的项。

近似

NOT

只返回不匹配操作数的项。操作数可以是任何有效的 FQL 表达式。

布尔值

ONEAR

NEAR 的有序变体,要求各字词按顺序匹配。ONEAR 运算符可用于将结果集限制为相互之间的特定距离内有 N 个字词的项。

近似

OR

只返回至少匹配一个 OR 操作数的项。如果多个 OR 操作数匹配,则匹配的项将得到较高的动态排名(结果集中的相关性分数)。

布尔值

PHRASE

只返回与标记的字符串完全匹配的项。

近似

RANGE

启用范围匹配表达式。RANGE 运算符用于数字和日期/时间托管属性。

数字

RANK

使您能够基于特定字词的出现次数来提升项的动态排名,而无需更改要与查询匹配的项。RANK 表达式包含一个必须匹配的组件以及一个或多个只参与动态排名的组件。

相关性

STARTS-WITH

指定必须在托管属性的开头显示的字词或短语。

近似

STRING

定义文本字符串的布尔值匹配条件。

字符串

XRANK

使您能够基于特定字词的出现次数来提升项的动态排名,而无需更改要与查询匹配的项。XRANK 表达式包含一个必须匹配的组件以及一个或多个只参与动态排名的组件。

此运算符与 RANK 运算符类似,但它具有不同的性能特征和排名参与控制。

相关性

AND

只返回匹配所有 AND 操作数的项。操作数可以是一个字词或任何有效的 FQL 子表达式。

语法

and(operand, operand [, operand]*)

参数

不适用。

示例

示例 1. 下面的表达式匹配其默认全文本索引包含"cat"、"dog"和"fox"的项。

and(cat, dog, fox)

ANDNOT

只返回匹配第一个操作数且不匹配后续操作数的项。操作数可以是一个字词或任何有效的 FQL 子表达式。

语法

andnot(operand, operand [,operand]*)

参数

不适用。

示例

示例 1. 下面的表达式匹配其默认全文本索引包含"cat"而非"dog"的项。

andnot(cat, dog)

示例 2. 下面的表达式匹配其默认全文本索引包含"dog"而非"beagle"和"chihuahua"的项。

andnot(dog, beagle, chihuahua)

ANY

OR 运算符类似,只是动态排名(结果集中的相关性分数)既不受匹配的操作数的数目影响,也不受项中各字词之间的距离的影响。操作数可以是一个字词或任何有效的 FQL 子表达式。

此查询部分的动态排名组件基于 ANY 表达式内的最佳匹配字词。

备注

与 OR 的差别在于,它仅与结果集内的排名有关。将有总数相同的一组项与查询匹配。

语法

any(operand, operand [,operand]*)

参数

不适用。

示例

示例 1. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。

如果索引同时包含"cat"和"dog",但将"cat"视为是更好的匹配项,则"项"的动态排名将基于"cat",而不会考虑"dog"。

any(cat, dog)

COUNT

指定将项必须包含的查询词的出现次数作为结果返回。操作数可以是一个查询词、一个短语或一个通配符查询词。

语法

property-spec:count(operand [,from=<numeric value>, to=<numeric value>])

参数

参数

说明

from

<numeric_value>

from 参数的值必须是一个正整数,它指定必须匹配指定操作数的最小次数。

如果未指定 from 参数,则不存在下限。

to

<numeric_value>

to 参数的值必须是一个正整数,它指定必须匹配指定操作数的最大次数(不包括该次数)。例如,to 值为 11 会指定次数小于或等于 10。

如果未指定 to 参数,则不存在上限。

示例

示例 1. 下面的表达式至少与单词"cat"匹配了 5 次。

count(cat, from=5)

示例 2. 下面的表达式至少与单词"cat"匹配了 5 次,但匹配次数不会大于或等于 10。

count(cat, from=5, to=10)

DATETIME

提供日期/时间数值的显式键入。此操作数是一个日期/时间字符串,其格式是按 日期和时间查询表达式中指定的语法设置的。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

语法

datetime(<date/time string>)

参数

不适用。

ENDS-WITH

指定必须在托管属性的末尾显示的单词或短语(边界匹配)。

数字托管属性不支持边界匹配。数字托管属性总是遵循完全匹配或值范围匹配。

一些应用程序可能需要您能够执行托管属性的完全匹配。例如,有这样一个 product name 托管属性,其中一个产品的全名是另一个产品名的子字符串。

语法

ends-with(<term or phrase>)

参数

不适用。

示例

示例 1. 下面的表达式匹配其"author"托管属性中包含"Mr Adam Jones"和"Adam Jones"值的项。此表达式与带"Adam Jones sr"值的项不匹配。

author:ends-with("adam jones")

备注

可对托管属性的所有文本应用边界匹配,也可对包含字符串值列表(例如,名称列表)的托管属性中的单个字符串应用边界匹配。在此情况下,您可能需要准确匹配每个字符串的内容,并避免执行跨字符串边界的查询匹配。

若要应用边界匹配查询,您必须在索引架构中配置相关的托管属性。

通过启用托管属性的边界匹配功能,可执行以下操作:

  • 使用显式边界匹配查询。

  • 禁止短语跨字符串边界进行匹配。对于包含多个字符串的托管属性,此功能将确保字符串不与边界指示之前或之后的单词匹配。

EQUALS

指定字词或短语必须提供与托管属性的准确标记匹配。

语法

equals(<term or phrase>)

参数

不适用。

示例

示例 1. 下面的示例将匹配其"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>)

参数

不适用。

示例

示例 1. 下面的表达式匹配具有一个包含"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

提供浮点数值的显式键入。依据 数词表达式中指定的语法,此操作数是一个浮点值。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

语法

float(<floating point value>)

参数

不适用。

INT

提供整数值的显式键入。依据 数词表达式中指定的语法,此操作数是一个整数值。

显式类型转换是可选的,通常不需要。根据目标数字托管属性的类型检测查询词的类型。

INT 运算符还可用于将一组整数值表示为 FQL 布尔运算符的参数。这将能够采用在性能上有效的方式在查询中提供一组整数值,因为 FQL 查询分析程序不解析通过使用 INT 运算符传递的值,而是直接将这些值传递到查询匹配组件。

语法

int(<integer value>)

int("value, value, … , value")

第一个语法指定一个整数。第二个语法指定括在双引号中的以逗号分隔的整数值列表。

参数

不适用。

示例

示例 1. 如果需要将您的查询限制为与数字属性中的一大组整数值中的至少一个整数值匹配,可通过使用 INT 运算符来表达此查询:

and(string("hello world"), filter(id:int("1 20 49 124 453 985 3473", mode="or")))

NEAR

将结果集限制为相互之间的特定距离内有 N 个字词的项。

查询词的顺序对于匹配并不重要,而只对距离重要。

可将任意数量的字词与 NEAR 运算符结合使用。

NEAR 操作数可以是单个字词、短语或 ORANY 布尔运算符表达式。通配符是可接受的。

如果 NEAR 运算符的多个操作数与同一个索引标记匹配,则将这些操作数视为彼此相邻。

语法

near(arg, arg [, arg]* [, N=<numeric value>])

参数

参数

说明

N

<numeric_value>

指定两个字词之间允许显示的最大单词数(显式近似)。

如果 NEAR 包含两个以上的操作数,则在整个表达式内计算两个字词之间允许的最大单词数 (N)。

默认值:4

示例

示例 1. 下面的表达式匹配同时包含"cat"和"dog"的字符串(如果分隔它们的索引标记不超过 4 个(默认值))。

near(cat, dog)

示例 2. 下面的表达式匹配同时包含"cat"、"dog"、"fox"和"wolf"的字符串(如果分隔它们的索引标记不超过 4 个)。

near(cat, dog, fox, wolf)

下表包含托管属性字符串值的示例,并指明它们是否匹配示例 2 中前面的表达式。

是否匹配?

文本

The picture shows a cat, a dog, a fox, and a wolf.

是(使用词干分解)

Dogs, foxes, and wolves are canines, but cats are felines.

The picture shows a cat with a dog, a fox, and a wolf.

下面的表达式匹配上表中的所有字符串。

near(cat, dog, fox, wolf, N=5)

示例 3. 下面的表达式匹配仅包含索引标记"clarinet"的托管属性,因为"c*t"和"clarinet"都匹配且被视为彼此相邻,即使这两个搜索标记匹配同一索引标记也是如此。

near("c*t", "clarinet")

备注

NEAR/ONEAR 字词距离注意事项

N 指示在项的匹配段内查询词之间允许显示的单词的最大数目。如果 NEARONEAR 包含两个以上的操作数,则在与所有 NEARONEAR 字词匹配的项部分内计算查询词之间允许的最大单词数 (N)。

对词汇切分文本使用 NEARONEAR。这表示将逗号(",")、句号(".")、冒号(":")或分号(";")等特殊字符视为空格。字词"distance"与索引文本中的标记相关。

如果使用操作数相等的 ONEAR 或 NEAR,则运算符将按如下方式工作:

near(a, a, n=x)

如果上下文中至少显示一个"a"实例,则此查询将始终返回 true。这还表示 NEAR 不能用作 COUNT 运算符。有关计算字词出现次数的详细信息,请参阅 COUNT 运算符。

应用于短语的 NEAR 还将与文本中的重叠短语匹配。

如果匹配段中的标记与 NEARONEAR 表达式的多个操作数匹配,则查询可以匹配,即使匹配段内的未匹配标记的数目超过了 NEAR 或 ONEAR 运算符表达式中的"N"值也是如此。例如,重叠可以为重叠短语。如果标记重叠匹配项的数目为"O",则查询将匹配(如果项的匹配段中仅显示"N+O"个未匹配标记)。

NEAR 或带有 NOT** 的 ONEAR**

NEARONEAR 运算符内不能使用 NOT 运算符。以下是错误的 FQL 语法:

near(audi,not(bmw),n=2)

NOT

只返回不匹配操作数的项。操作数可以是任何有效的 FQL 表达式。

语法

not(operand)

参数

不适用。

ONEAR

NEAR 的有序变体,要求各字词按顺序匹配。ONEAR 运算符可用于将结果集限制为相互之间的特定距离内有 N 个字词的项。

语法

onear(arg, arg [, arg]* [, N=<numeric value>])

参数

参数

说明

N

<numeric_value>

指定两个字词之间允许显示的最大单词数(显式近似)。

如果 ONEAR 包含两个以上的操作数,则在整个表达式内计算两个字词之间允许的最大单词数 (N)。

默认值:4

示例

示例 1. 下面的表达式与依次出现的所有的"cat"、"dog"、"fox"和"wolf"单词匹配(如果分隔它们的索引标记不超过 4 个)。

onear(cat, dog, fox, wolf)

下表包含托管属性字符串值的示例,并指明它们是否匹配上一个表达式。

是否匹配?

文本

The picture shows a cat, a dog, a fox, and a wolf.

Dogs, foxes, and wolves are canines, but cats are felines.

The picture shows a cat with a dog, a fox, and a wolf.

示例 2. 下面的表达式(使用词干分解)与上表中第二行中的文本匹配。

onear(dog, fox, wolf, cat, N=5)

示例 3. 下面的表达式与上表中第一行和第三行的文本匹配。

onear(cat, dog, fox, wolf, N=5)

备注

另请参阅 NEAR

OR

只返回至少与一个 OR 操作数匹配的项。如果与多个 OR 操作数匹配,则匹配的项将得到较高的动态排名(结果集中的相关性分数)。操作数可以是一个字词或任何有效的 FQL 子表达式。

语法

or(operand, operand [,operand]*)

参数

不适用。

示例

示例 1. 下面的表达式与其默认全文本索引包含"cat"或"dog"的所有项匹配。如果项的默认全文本索引包含"cat"和"dog",则将匹配该项,如果该项仅包含这些标记之一,则其动态排名将高于预期排名。

or(cat, dog)

PHRASE

搜索标记的完整字符串。

PHRASE 操作数可以是一个字词。通配符是可以接受的。

语法

phrase(term [, term]*)

参数

不适用。

备注

另请参阅 STRING

RANGE

RANGE 运算符用于数字和日期/时间托管属性。此运算符支持范围匹配表达式。

语法

range(start, end [,from="GE"|"GT"] [,to="LE"|"LT"])

参数

参数

说明

start

<numeric_value>|<date/time_value>

范围的开始值。

若要指定范围没有下限,则使用保留字 min

stop

<numeric_value>|<date/time_value>

范围的结束值。

若要指定范围没有上限,则使用保留字 max

from

GE|GT

可选参数,指示打开或关闭的开始间隔。

有效值:

  • GE  大于或等于开始值(大于或等于开始间隔)。

  • GT  大于开始值(大于开始间隔)。

默认值:GE

to

LE|LT

可选参数,指示打开的或关闭的结束间隔。

有效值:

  • LE  小于或等于结束值(小于或等于结束间隔)。

  • LT  小于结束值(小于结束间隔)。

默认值:LT

示例

示例 1. 下面的表达式与项中出现的以短语"olympic games"开头的说明属性(大小至少为 10,000 个字节)匹配。

and(size:range(10000, max), description:starts-with("olympic games"))

RANK

基于特定字词的出现次数来提升项的动态排名,而无需更改要与查询匹配的项。RANK 表达式包含一个必须匹配的组件以及一个或多个只参与动态排名的组件。

RANK 运算符和 XRANK 运算符之间的差异如下所示:

  • 当 RANK 操作数中的字词生成多次命中时,XRANK 比 RANK 更有效。

  • 对于 XRANK,可在查询时通过 boost 参数来设置提升级别。

  • XRANK 添加一个常数排名值,而 RANK 添加与操作数相关的排名值。

  • XRANK 将排名添加到尚未收到任何动态排名的项中。

  • XRANK 操作数也可以操作托管属性(不仅仅是全文本索引)。

RANK 运算符采用两个或多个操作数。第一个操作数为匹配的主查询表达式。它可像其他字词或表达式一样用于重新调用或提高精度。后续操作数可用于提升动态排名,而不会影响与查询匹配的项。操作数可以是一个字词或任何有效的 FQL 子表达式。

RANK 运算符只能用于全文本索引。

语法

rank(operand, rank-operand [, rank-operand]*)

参数

不适用。

示例

示例 1. 下面的表达式与其索引包含"dog"的项匹配。如果项的索引还包含"cat",则此表达式将提升项的动态排名。如果项的索引包含"cat"而非"dog",则项与此表达式不匹配。

rank(dog, cat)

示例 2. 下面的表达式与其索引包含"dog"的项匹配。如果项的索引还包含"boxer"或"pointer",则此表达式将提升项的动态排名。

rank(dog, boxer, pointer)

示例 3. 以下表达式匹配的项与上一表达式匹配的项相同,只是该表达式是在项的索引还包含短语"thoroughbred beagle"时提升项的动态排名。

rank(dog, "thoroughbred beagle")

示例 4. 下面的表达式与其 title 托管属性包含"dog"和"beagle"的项匹配。对于其 title 托管属性还包含索引标记"thoroughbred"的项,此表达式将提升该项的动态排名。

and(title:dog, rank(title:beagle, title:thoroughbred))

STARTS-WITH

指定一个必须显示在托管属性开头的单词或短语。

语法

starts-with(<term or phrase>)

参数

不适用。

示例

示例 1. 下面的表达式将与其 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>]

      [, minexpansion=<n>]

      [, maxexpansion=<n>]

      [, annotation_class=<annotation_string>])

参数

参数

说明

mode

<mode>

mode 参数指定如何计算 <text string> 值。下表显示了有效值。

模式

等效运算符表达式

"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)

"SIMPLEALL"

此字符串的格式是根据简单查询语言"ALL"语法设置的。有关详细信息,请参阅 FQL 简单查询语言

"SIMPLEANY"

此字符串的格式是根据简单查询语言"ANY"语法设置的。有关详细信息,请参阅 FQL 简单查询语言

默认值:"PHRASE"

n

<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

此参数控制 <text string> 内字词的通配符扩展。该设置将重写查询参数中的任何通配符设置,并允许对查询的特定部分启用或禁用扩展的通配符。

以下是有效值:

  • "ON"  指定将"?"和"*"字符作为通配符进行评估。"?"字符与任意单个字符匹配,而"*"字符与零个或多个字符匹配。

  • "OFF"  指定不将字符"?"和"*"作为通配符进行评估。

默认值:"ON"

minexpansion

<positive_integer>

此参数定义通配符扩展中的子字符串的最小长度。

<string> 值必须是带单个星号的通配符表达式。

默认值:0

maxexpansion

<positive_integer>

此参数定义通配符扩展中的子字符串的最大长度。

<string> 值必须是带单个星号的通配符表达式。

默认值:infinity

annotation_class

<annotation_string>

STRING 参数 annotation_class="user" 用于注释 STRING 节点以指示此节点由用户生成。

某些相关性功能仅适用于用户生成的查询的一部分。这包括基于定位文本和点击率查询日志的查询提升。

示例

示例 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. 由于问号("?")和星号("*")字符将作为通配符进行评估,因此以下字符串标记表达式将与"cat"、"cot"和任何其他以"c"开头并以"t"结尾的三个字母的索引标记匹配。

string("c?t")
string("c*t")

示例 9. 下面的字符串标记表达式匹配已禁用语言功能的单词"nobler",因此不使用词干分解来匹配该单词的其他形式(如"ennobling")。

string("nobler", linguistics="off")

示例 10. 下面的表达式匹配包含"cat"或"dog"的项,但此表达式对包含"dog"的项的动态排名的提升程度高于比对包含"cat"的项的动态排名的提升程度。

or(string("cat", weight="200"), string("dog", weight="500"))

示例 11. 下面的表达式匹配以"prefix"开始并以"suffix"结束的所有字词,其中"prefix"和"suffix"之间的子字符串的最大长度为 4 个字符。

string("prefix*suffix",maxexpansion=4)

示例 12. 下面的字符串标记表达式匹配单词"microsoft corporation"。添加 annotation_class 参数可确保在指向该项的链接中具有完全相同的定位文本的项将获得额外的排名提升。

string("Microsoft corporation", annotation_class="user")

备注

动态排名的相关性权重

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("help@contoso.com")

词汇切分短语匹配

通过将 STRING 运算符与 mode="phrase" 或 PHRASE 运算符一起使用,可搜索标记的准确字符串。

所有此类短语运算都表示词汇切分的短语匹配。这意味着特殊字符将视为空格,如逗号(",")、分号(";")、冒号(":")、下划线字符("_")、减号("-")或左斜线("/")。这与词汇切分过程有关。

XRANK

基于特定字词的出现次数来提升项的动态排名,而无需更改要与查询匹配的项。XRANK 表达式包含一个必须匹配的组件以及一个或多个只参与动态排名的组件。

RANK 运算符和 XRANK 运算符之间的差异如下所示:

  • 当 RANK 操作数中的字词生成多次命中时,XRANK 比 RANK 更有效。

  • 对于 XRANK,可在查询时通过 boost 参数来设置提升级别。

  • XRANK 添加一个常数排名值,而 RANK 添加与操作数相关的排名值。

  • XRANK 将排名添加到尚未收到任何动态排名的项中。

  • XRANK 操作数也可以操作托管属性(不仅仅是全文本索引)。

XRANK 运算符采用两个或多个操作数。操作数可以是一个字词或任何有效的 FQL 子表达式。

第一个操作数为匹配的主查询表达式。它可像其他字词或表达式一样用于重新调用或提高精度。

后续操作数不影响匹配项的总数,但会按某种方式影响匹配动态排名,使匹配以下操作数中的字词的项在结果集中获得更高的排名。如果您具有多个后续操作数,则每个操作数的匹配会向项目的总排名中添加提升值 n。

此运算符可用于根据找到的特定文本字词(但这些字词不必具有匹配项)提升动态排名。

XRANK 运算符可用于全文本索引和托管属性。

XRANK 支持一元提升。xrank(a,boost=n) 将向每个匹配 a 的项中添加提升值 n。当您使用 ANDANY 运算符组合多个 XRANK 表达式时,可使用此语法。

语法

xrank(operand, rank-operand [, rank-operand]* [,boost=n] [,boostall=yes])

参数

参数

说明

boost

<numeric_value>

指定将按指定的数字提升匹配项的动态排名。

动态排名组件将不会小于零(不支持负的结果排名)。由于存在静态排名组件,仍可能获得正的结果排名。

默认值:100

boostall

yes|no

指定动态排名上的提升是否将应用于不具有动态排名的项。

  • yes  指定动态排名上的提升将应用于所有匹配项,即使它们不具有动态排名值。

  • no  指定动态排名上的提升将只应用于已具有动态排名值的匹配项。

默认值:no

示例

示例 1. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。此表达式会提升还包含"thoroughbred"的项的动态排名。

xrank(or(cat, dog), thoroughbred)

示例 2. 下面的表达式与其默认全文本索引包含"cat"或"dog"的项匹配。此表达式会将包含"thoroughbred"的项的动态排名提升 500 而非 100(默认值),即使对于之前没有排名的项也是如此。

xrank(or(cat, dog), thoroughbred, boost=500, boostall=yes)

请参阅

概念

FAST Search 查询集成概述

FAST 查询语言 (FQL) 语法参考

FQL 属性规范

FQL 标记表达式

FQL 简单查询语言

FQL 语法参考 (ABNF)