search 运算符
在多个表和列中搜索文本模式。
语法
[T |
] search
[kind=
CaseSensitivity ] [in
(
TableSources)
] SearchPredicate
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
T | string |
要搜索的表格数据源,例如表名、union 运算符或表格查询的结果。 不能与 TableSources 一起显示。 | |
CaseSensitivity | string |
一个标志,它控制所有 string 标量运算符(例如 has )在区分大小写方面的行为。 有效值为 default 、case_insensitive 、case_sensitive 。 选项 default 和 case_insensitive 同义,因为默认行为是不区分大小写。 |
|
TableSources | string |
要参与搜索的“带通配符的”表名的逗号分隔列表。 此列表具有与 union 运算符列表相同的语法。 不能与 TabularSource 一起显示。 | |
SearchPredicate | string |
✔️ | 要对输入中的每个记录计算的布尔表达式。 如果它返回 true ,则输出记录。 请参阅搜索谓词语法。 |
搜索谓词语法
使用 SearchPredicate 可以搜索所有表列中的特定字词。 要应用于搜索字词的运算符取决于字词中是否存在星号通配符 (*
) 和通配符的位置,如下表所示。
文本 | 运算符 |
---|---|
billg |
has |
*billg |
hassuffix |
billg* |
hasprefix |
*billg* |
contains |
bi*lg |
matches regex |
还可以将搜索限制为特定的列,查找完全匹配项而不是字词匹配项,或者按正则表达式进行搜索。 下表显示了其中每个案例的语法。
语法 | 说明 |
---|---|
ColumnName: StringLiteral |
此语法可用于将搜索限制为特定的列。 默认行为是搜索所有列。 |
ColumnName== StringLiteral |
此语法可用于根据字符串值搜索列的完全匹配项。 默认行为是查找字词匹配项。 |
Column matches regex StringLiteral |
此语法指示正则表达式匹配,其中 StringLiteral 是正则表达式模式。 |
使用布尔表达式合并条件并创建更复杂的搜索。 例如,"error" and x==123
将搜索在任何列中具有字词 error
且在 x
列中具有值 123
的记录。
注意
如果同时省略 TabularSource 和 TableSources,则会对范围内的数据库的所有不受限制的表和视图执行搜索。
搜索谓词语法示例
# | 语法 | 含义(等效的 where ) |
注释 |
---|---|---|---|
1 | search "err" |
where * has "err" |
|
2 | search in (T1,T2,A*) "err" |
并集 T1、T2、A * |其中 * 有 "err" |
|
3 | search col:"err" |
where col has "err" |
|
4 | search col=="err" |
where col=="err" |
|
5 | search "err*" |
where * hasprefix "err" |
|
6 | search "*err" |
where * hassuffix "err" |
|
7 | search "*err*" |
where * contains "err" |
|
8 | search "Lab*PC" |
where * matches regex @"\bLab.*PC\b" |
|
9 | search * |
where 0==0 |
|
10 | search col matches regex "..." |
where col matches regex "..." |
|
11 | search kind=case_sensitive |
所有字符串比较都区分大小写 | |
12 | search "abc" and ("def" or "hij") |
where * has "abc" and (* has "def" or * has hij") |
|
13 | search "err" or (A>a and A<b) |
where * has "err" or (A>a and A<b) |
备注
不同于find 运算符,search
运算符不支持以下项:
withsource=
:输出将始终包含一个名为$table
且类型为string
的列,其值是要从中检索每个记录的表名称(或者,如果源不是一个表,而是一个复合表达式,则其值为系统生成的某个名称)。project=
、project-smart
:此输出架构等效于project-smart
输出架构。
示例
全局字词搜索
在数据库的所有不受限表和视图中按范围搜索某个字词。
search "Green"
输出包含来自 Customers
、Products
和 SalesTable
表的记录。 Customers
记录显示姓氏为“Green”的所有客户,Products
和 SalesTable
记录显示提到了“Green”的产品。
条件全局字词搜索
在数据库的所有不受限表和视图中按范围搜索与两个字词匹配的记录。
search "Green" and ("Deluxe" or "Proseware")
搜索特定表
仅在 Customers
表中搜索。
search in (Products) "Green"
区分大小写的搜索
在数据库的所有不受限表和视图中按范围搜索与两个字词匹配(区分大小写)的记录。
search kind=case_sensitive "blue"
搜索特定列
在数据库的所有不受限表和视图的“FirstName”和“LastName”列中按范围搜索某个字词。
search FirstName:"Aaron" or LastName:"Hughes"
按时间戳限制搜索
如果某个字词出现在日期晚于给定日期的记录中,则在数据库的所有不受限表和视图中按范围搜索该字词。
search "Hughes" and DateKey > datetime('2009-01-01')
性能提示
# | 提示 | Prefer | Over |
---|---|---|---|
1 | 最好使用单个 search 运算符而非多个连续的 search 运算符 |
search "billg" and ("steveb" or "satyan") |
搜索"billg" | 搜索 "steveb"或"satyan" |
2 | 最好在 search 运算符内进行筛选 |
search "billg" and "steveb" |
搜索 * | 其中 * 有 "billg";* 有 "steveb" |