查询运算符
通过使用查询 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 表示如下所示:

:
(包括)
此运算符指定包含完整查询词汇。
例如,以下查询在 text
字段中搜索包含术语 cloud computing
的文档:
{
"query":"enriched_text.entities.text:\"cloud computing\""
}
include 运算符不会返回查询词汇的部分匹配项。 如果要查找术语的部分匹配,请将 通配符 运算符与 include 运算符配合使用。 例如,如果要在 test_results
字段中查找 TP53
或 p53
的任何实例,那么以下查询将 不会 查找这两个术语的实例:
{
"query":"test_results:P53"
}
请改为在请求中包含通配符。 例如,使用以下查询请求。 因为我们使用的是通配符运算符,所以我们也将该术语更改为小写。
{
"query":"test_results:*p53"
}
使用此语法时,将全部返回出现的 p53
,tp53
,P53
或 TP53
。
""
(短语查询)
短语查询仅与整个短语的出现匹配。 短语中单词的顺序必须匹配。
例如,以下查询仅返回包含具有文本 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
的文档。 但是,不匹配仅提及 baseball
或 crying
而不包含整个短语的文档。 这两个文档都不是具有 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 Data
,IBM cloud
或 Cloud
。
{
"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:\>=D
或 method::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”的布尔运算符。
在以下示例中,将返回将 Google
或 IBM
标识为实体的文档:
{
"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”的布尔运算符。
在以下示例中,将返回将 Google
和 IBM
标识为实体的文档:
{
"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 than
或 equal to
、greater than
或 equal to
、greater than
和 less than
的数值比较。
仅当值为 number
或 date
时使用数字比较运算符。
以引号括起的任何值都是字符串。 因此,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
以及 cap
,cat
,can
和 sat
等的文档:
{
"query":"title:cat~1"
}
该词的规范化版本用于匹配。 因此,如果输入包含“猫”,那么搜索将查找“猫”,这是复数猫的规范化形式。
在提交短语时,该短语中的每个词汇都允许指定数量的变体。 例如,除了 car hog
之外,以下输入还与 cat dog
和 far log
匹配。
例如:
{
"query":"title:\"car hog\"~1"
}
:*
(存在)
用于返回指定字段存在的所有结果。
例如:
{
"query":"title:*"
}
:!*
(不存在)
用于返回不包括指定字段的全部结果。
例如:
{
"query":"title:!*"
}
有关更多信息,请参阅 Discovery API 参考。
有关查询概念的概述,请参阅查询概述。