IBM Cloud Docs
查询运算符

查询运算符

通过使用查询 API 编写要提交到 Discovery 的查询时,可以使用运算符。

受支持的运算符类型因查询类型而异:

自然语言查询 (NLQ) 运算符

natural_language_query 参数接受字符串值。

"" (短语查询)

使用引号来强调查询中最需要匹配的单个词或短语。 例如,以下请求会提升其中包含术语“提名”的文档。

{
  "natural_language_query":"What is the process for \"nomination\" of bonds?"
}

指定带引号的短语不会阻止未返回该短语的文档。 它只是比没有它的文件更重视有这个词的文件。 例如,查询结果还可能包含提及“债券”或“流程”的文档,并且不包含“提名”一词。

以下请求支持“货币政策变化”短语,并且与“变化”或“货币”或“政策”匹配。

{
  "natural_language_query":"\"change in monetary policy\""
}

不支持单引号 (')。 不能在短语查询中使用通配符 (*)。

发现查询语言 (DQL) 运算符

运算符是一个查询中不同部分之间的分隔符。

. (JSON分隔符)

此定界符用于分隔 JSON 模式中的层次结构级别。

例如,以下查询参数标识 enriched_text 对象中包含实体和可识别为实体的文本的部分。

enriched_text.entities.text

此部分的 JSON 表示如下所示:

显示enriched_text.entities.text对象
*enriched_text.entities.text
*JSON 表示法的 JSON 源

: (包括)

此运算符指定包含完整查询词汇。

例如,以下查询在 text 字段中搜索包含术语 cloud computing 的文档:

{
  "query":"enriched_text.entities.text:\"cloud computing\""
}

include 运算符不会返回查询词汇的部分匹配项。 如果要查找术语的部分匹配,请将 通配符 运算符与 include 运算符配合使用。 例如,如果要在 test_results 字段中查找 TP53p53 的任何实例,那么以下查询将 不会 查找这两个术语的实例:

{
  "query":"test_results:P53"
}

请改为在请求中包含通配符。 例如,使用以下查询请求。 因为我们使用的是通配符运算符,所以我们也将该术语更改为小写。

{
  "query":"test_results:*p53"
}

使用此语法时,将全部返回出现的 p53tp53P53TP53

"" (短语查询)

短语查询仅与整个短语的出现匹配。 短语中单词的顺序必须匹配。

例如,以下查询仅返回包含具有文本 There's no crying in baseball 的名为 quotation 的字段的文档。

{
  "query":"quotation:\"There's no crying in baseball\""
}

还将返回具有 quotation 字段 Jimmy Dugan said there's no crying in baseball 的文档。 但是,不匹配仅提及 baseballcrying 而不包含整个短语的文档。 这两个文档都不是具有 In baseball, there's no crying 的文档。 在错误字段中包含正确文本的文档也不匹配。 例如,不会返回 text 字段中包含文本 There's no crying in baseball 的文档。

不支持单引号 (')。 不能在短语查询中使用通配符 (*)。

:: (完全匹配)

此运算符指定查询项的完全匹配项。 完全匹配是区分大小写的。

例如,以下查询将搜索包含类型为 Organization 的实体的文档:

{
  "query":"enriched_text.entities.type::Organization"
}

您指定的字段的整个内容必须与您指定的短语相匹配。 例如,以下查询将查找仅检测到 IBM Cloud 的实体提及项的文档,而不是 IBM Cloud Pak for DataIBM cloudCloud

{
  "query":"enriched_text.entities.text::\"IBM Cloud\""
}

不能匹配长度超过 256 个字符的文档字段。

要获取给定字符符号的查询结果,请参见以下示例:

curl -X POST "https://api.jp-tok.discovery.watson.cloud.ibm.com/instances/<instance-id>/v2/projects/<project-id>/query?version=2023-03-31" \
  -u "apikey:<wd-api-key>" \
  --header "Content-Type: application/json" \
  --data '{
    "query": "<field-with-symbol>::*¥*"
  }'

此查询示例用于查询¥。您可以将¥替换为要搜索的字符符号。 如果包含可搜索符号的字段长度小于 256个字符,搜索将返回匹配值。 此外,无论文档的哪个部分与查询相关,整个文档都会匹配。

:! (不包括)

此运算符表示查询结果中不包含与查询词匹配的内容。

例如:

{
  "query":"enriched_text.entities.text:!\"cloud computing\""
}

::! (不完全匹配)

此运算符表示查询结果与查询词不完全匹配。

例如:

{
  "query":"enriched_text.entities.text::!\"Cloud computing\""
}

完全匹配是区分大小写的。

如果字段长度超过 256 个字符,那么将检索与查询项匹配的文档字段。

\ (转义字符)

转义字符,保留后面的运算符的字面值。

文本查询 (短语查询除外) 中有效转义序列的完整列表:

\",\\,\(,\),\[,\],\,,\|,\^,\~,\:,\<=,\>=,\<,\>,\:!,\::,\::!,\*,\!

例如,message:\>=Dmethod::foo\(String\)

在短语查询中,唯一有效的转义序列是 \"

例如,name:"Shane \"Rapha\" Hendrixson"method::"foo(String)"

DQL 作为 JSON 字符串字段提交到 查询 API,这需要它们自己的额外转义层,例如:

{
  "query":"name:\"Shane \\\"Rapha\\\" Hendrixson\""
}

()[] (嵌套分组)

可以构成逻辑分组来指定更具体的信息。

例如:

{
  "query":"enriched_text.entities:(text:IBM,type:Company)"
}

| (或者)

“or”的布尔运算符。

在以下示例中,将返回将 GoogleIBM 标识为实体的文档:

{
  "query":"enriched_text.entities.text:Google|enriched_text.entities.text:IBM"
}

包含 (::!) 和匹配 (::::!) 运算符优先于 OR 运算符。

例如,以下语法搜索其中 Google 标识为实体或存在字符串 IBM 的文档:

{
  "query":"enriched_text.entities.text:Google|IBM"
}

其处理方式如下:

(enriched_text.entities.text:Google) OR IBM

, (以及)

“and”的布尔运算符。

在以下示例中,将返回将 GoogleIBM 标识为实体的文档:

{
  "query":"enriched_text.entities.text:Google,enriched_text.entities.text:IBM"
}

包含 (::!) 和匹配 (::::!) 运算符优先于 AND 运算符。

例如,以下语法搜索将 Google 标识为实体且存在字符串 IBM 的文档:

{
  "query":"enriched_text.entities.text:Google,IBM"
}

其处理方式如下:

(enriched_text.entities.text:Google) AND IBM

<=, >=, >, < (数值比较)

创建 less thanequal togreater thanequal togreater thanless than 的数值比较。

仅当值为 numberdate 时使用数字比较运算符。

以引号括起的任何值都是字符串。 因此,score>=0.5 是有效的查询,而 score>="0.5" 则无效。

例如:

{
  "query":"invoice.total>100.50"
}

^x (得分乘数)

增加搜索项的分数值。

例如:

{
  "query":"enriched_text.entities.text:IBM^3"
}

* (通配符)

与搜索表达式中的未知字符相匹配。 不要将大写字母与通配符一起使用。

例如:

{
  "query":"enriched_text.entities.text:ib*"
}

~n (弦乐变奏)

与字符串匹配时允许的字符差异数。 可使用的最大变体号为 2。

例如,以下查询将返回在标题字段中包含 car 以及 capcatcansat 等的文档:

{
  "query":"title:cat~1"
}

该词的规范化版本用于匹配。 因此,如果输入包含“猫”,那么搜索将查找“猫”,这是复数猫的规范化形式。

在提交短语时,该短语中的每个词汇都允许指定数量的变体。 例如,除了 car hog 之外,以下输入还与 cat dogfar log 匹配。

例如:

{
  "query":"title:\"car hog\"~1"
}

:* (存在)

用于返回指定字段存在的所有结果。

例如:

{
  "query":"title:*"
}

:!* (不存在)

用于返回不包括指定字段的全部结果。

例如:

{
  "query":"title:!*"
}

有关更多信息,请参阅 Discovery API 参考

有关查询概念的概述,请参阅查询概述