查詢運算子
當您撰寫查詢以使用查詢 API 提交至 Discovery 時,可以使用運算子。
支援的運算子類型因查詢類型而異:
自然語言查詢 (NLQ) 運算子
natural_language_query 參數接受字串值。
"" (短語查詢)
使用引號來強調查詢中最重要要符合的單一單字或詞組。 例如,下列要求會提高其中包含術語「提名」的文件。
{
"natural_language_query":"What is the process for \"nomination\" of bonds?"
}
指定加引號的詞組並不會阻止未傳回該詞組的文件。 它只是比那些沒有它的檔案更重視有這個短語的檔案。 例如,查詢結果也可能包含提及「債券」或「程序」的文件,且不包含「提名」這個字。
下列要求會提升 "change in monetary policy" 詞組,也會符合 "change" 或 "monetary" 或 "policy"。
{
"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\""
}
includes 運算子不會傳回查詢術語的局部相符項。 如果您想要尋找術語的部分相符項,請搭配使用 wildcard 運算子與 includes 運算子。 例如,如果您要在 test_results 欄位中尋找任何出現的 TP53 或 p53,則下列查詢 不會 尋找這兩個術語的出現項目:
{
"query":"test_results:P53"
}
請改為在要求中包含萬用字元。 例如,使用下列查詢要求。 因為我們使用萬用字元運算子,所以我們也將術語變更為小寫。
{
"query":"test_results:*p53"
}
使用此語法,會傳回所有出現的 p53、tp53、P53 或 TP53。
"" (短語查詢)
詞組查詢只會比對整個詞組的出現項目。 詞組中的單字順序必須相符。
例如,下列查詢只會傳回包含名為 quotation 且文字為 There's no crying in baseball 的欄位的文件。
{
"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 個字元,則會擷取符合查詢術語的文件欄位。
\ (轉換字元)
跳出字元,保留其後面運算子的文字值。
文字查詢內有效 ESC 序列的完整清單 (詞組查詢除外):
\",\\,\(,\),\[,\],\,,\|,\^,\~,\:,\<=,\>=,\<,\>,\:!,\::,\::!,\*,\!
例如,message:\>=D、method::foo\(String\)。
在詞組查詢內,唯一有效的 ESC 序列是 \"。
例如,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"
}
單字的正規化版本用於比對。 因此,如果輸入包含 "cats",則搜尋會尋找 "cat",這是複數 cats 的正規化形式。
提交詞組時,該詞組中的每一個術語都容許指定數目的變異。 例如,除了 car hog 之外,下列輸入還符合 cat dog 和 far log。
例如:
{
"query":"title:\"car hog\"~1"
}
:* (存在)
用於返回存在指定欄位的所有結果。
例如:
{
"query":"title:*"
}
:!* (不存在)
用來回傳所有不包含指定欄位的結果。
例如:
{
"query":"title:!*"
}
如需相關資訊,請參閱 Discovery API 參考資料。
如需查詢概念的概觀,請參閱查詢概觀。