在使用 kintone REST API 透過 Query string 來篩選記錄時,開發者常會對於 "like" 運算子 的運作方式感到困惑,因為它與 SQL 的 LIKE
條件式運作邏輯有所不同。這篇文章將說明 kintone 的 "like" 搜尋規則,並提供一些建議,幫助開發者避免搜尋失敗的問題。
在 kintone 中使用英文及數字搜尋時,"like" 運算子的搜尋方式並不是單純的部分字串匹配,而是以單字為單位來進行搜尋。這代表著字串的結構會影響搜尋結果。例如:
假設有一筆記錄:
test0001
當你執行以下 Query 來搜尋:
field like "test"
這筆記錄 不會被找到,因為 "test0001"
被視為一個完整的單字,並不會拆分成 "test"
和 "0001"
。
如果記錄內容改為:
test-0001
這時候,kintone 會將 "test-0001"
判斷為 "test" 和 "0001" 兩個單詞,因此以下 Query 可以搜尋到這筆記錄:
field like "test"
這是因為在 kintone 搜尋規則中,符號 "-" 會從關鍵字中被排除的緣故。
官方搜尋行為的詳細說明可參考以下文件:
🔗 kintone 搜尋資料-輸入搜尋關鍵字時的注意事項
以下節錄部分重點:
範例:
cybozu kintone2
field like "cybozu"
✅ 可以搜尋到
field like "kintone2"
✅ 可以搜尋到
field like "cy"
❌ 無法搜尋到
field like "kintone"
❌ 無法搜尋到
"cybozu"
和 "kintone2"
各自被視為一個單詞,因此搜尋 "cybozu kintone2"
會被解析為兩個單詞的搜尋。
以下符號(不論全形半形)都會被視為單字的一部分:
_
(底線)#
(井字號)+
(加號)因此當字串為:
cybozu_kintone
field like "cybozu_kintone"
✅ 可以搜尋到
field like "cybozu"
❌ 無法搜尋到
field like "kintone"
❌ 無法搜尋到
以下符號在搜尋時將從關鍵字中被排除:
- & | / ! ( ) { } [ ] ^ " ~ * ? : ; \ $ % @ ' ` = < > , .
故在字串中碰到這些符號時,會像碰到空格一樣將字串拆分成單詞。
例如:
apple&pie
這個字串在 kintone 內部會被視為 "apple" 跟 "pie" 兩個單字("&" 不會被搜尋到)
field like "apple"
✅ 可以搜尋到
field like "pie"
✅ 可以搜尋到
field like "apple&pie"
✅ 可以搜尋到
甚至用 "apple-pie"
、"apple*pie"
、"apple~pie"
都可以搜尋到,因為 "-"
、"*"
、"~"
這些符號在搜尋時都會被排除掉。
kintone 的 "like"
運算子與 SQL 的 LIKE
不同,它以單字為單位來進行搜尋。當字母與數字連在一起時會被視為完整單詞,故在設計資料格式(例如申請單號、項目代號等等)時,若有模糊搜尋的需求,可善用被排除的符號來對字串進行分割,以方便日後搜尋。