# 设备高级搜索
#### 概述
在海量设备场景下，您可以通过高级搜索功能，通过类SQL语句快速组装灵活的检索条件搜索满足条件的设备，例如：通过前缀模糊搜索设备名称、标签搜索在线设备列表等。本文将介绍高级搜索操作方式以及类SQL语法使用。
#### 使用限制
- 仅标准版、企业版实例支持该接口调用，基础版实例不支持。
- 单账号调用该接口的 TPS 限制最大为1/S(每秒1次请求数)。
 
#### 使用场景
设备检索：在所有设备-设备列表界面通过类SQL语句方式，检索指定的设备进行后续管理操作。
设备动态分组：通过设备动态分组的类SQL语句规则，过滤出来符合条件的设备自动加入到群组进行管理。
#### 操作步骤
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 在设备接入控制台左侧导航栏，选择"设备 \> 所有设备"，进入设备列表页，设备列表默认显示当前实例下的所有设备。
3. 单击"高级搜索"按钮，输入类SQL语句，单击"搜索"展示搜索条件下的设备列表。 
   图1设备-高级搜索   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001982690901.png "点击放大")
   
   
 
#### 类SQL语法使用说明
控制台使用类SQL语句时需要省略select、from、order by、limit子句，**仅输入where子句编辑自定义条件即可**，长度限制为400个字符，子句里的内容大小写敏感，SQL语句的关键字大小写不敏感；控制台默认按照marker字段desc方式排序；
where子句格式：
```
[condition1] AND [condition2]
```
示例：
```
product_id = 'testProductId'
```
最多支持5个condition，不支持嵌套；支持的检索字段请参见[表1]和[表2]。
连接词支持AND、OR，优先级参考标准SQL语法，默认AND优先级高于OR。
 表1搜索条件字段说明 
| 字段名           | 类型        | 说明       | 取值范围                                                          |
|:---|:---|:---|:---|
| app_id        | string    | 资源空间ID | 长度不超过36，只允许字母、数字、下划线（_）、连接符（-）的组合。                            |
| device_id    | string   | 设备ID      | 长度不超过128，只允许字母、数字、下划线（_）、连接符（-）的组合。                          |
| gateway_id   | string   | 网关ID     | 长度不超过128，只允许字母、数字、下划线（_）、连接符（-）的组合。                          |
| product_id   | string     | 设备关联的产品ID | 长度不超过36，只允许字母、数字、下划线（_）、连接符（-）的组合。                             |
| device_name    | string  | 设备名称     | 长度不超过256，只允许中文、字母、数字、以及_?'#().,\&%@!-等字符的组合。                 |
| node_id     | string   | 设备标识码    | 长度不超过64，只允许字母、数字、下划线（_）、连接符（-）的组合。                              |
| status      | string | 设备的状态   | ONLINE(在线)、OFFLINE(离线)、ABNORMAL(异常)、INACTIVE(未激活)、FROZEN(冻结) |
| node_type    | string   | 设备节点类型   | GATEWAY(直连设备或网关)、ENDPOINT(非直连设备)                             |
| tag_key      | string    | 标签键    | 长度不超过64，只允许中文、字母、数字、以及_.-等字符的组合。                              |
| tag_value     | string   | 标签值      | 长度不超过128，只允许中文、字母、数字、以及_.-等字符的组合。                            |
| sw_version  | string    | 软件版本      | 长度不超过64，只允许字母、数字、下划线（_）、连接符（-）、英文点(.)的组合。                      |
| fw_version  | string     | 固件版本    | 长度不超过64，只允许字母、数字、下划线（_）、连接符（-）、英文点(.)的组合。                       |
| group_id      | string    | 群组id     | 长度不超过36，十六进制字符串和连接符（-）的组合。                                  |
| create_time | string   | 设备注册时间   | 格式：yyyy-MM-dd'T'HH:mm:ss.SSS'Z'，如：2015-06-06T12:10:10.000Z。 |
| marker        | string    | 结果记录ID   | 长度为24的十六进制字符串，如ffffffffffffffffffffffff。                       |
   
 表2支持的运算符 
| 运算符    | 支持的字段                                  |
|:---|:---|
| =      | 所有                                     |
| !=      | 所有                                    |
| \>    | create_time、marker                    |
| \<    | create_time、marker                     |
| like    | device_name、node_id、tag_key、tag_value |
| in    | 除tag_key、tag_value以外字段                 |
| not in | 除tag_key、tag_value以外字段                 |
   
**SQL 限制**
- like：只支持前缀匹配，不支持后缀匹配或者通配符匹配。前缀匹配不得少于4个字符，且不能包含任何特殊字符（只允许中文、字母、数字、下划线（_）、连接符（-）），前缀后必须跟上"%"结尾。
- 不支持其他SQL用法，如嵌套SQL、union、join、别名(Alias)等用法。
- SQL长度限制为400个字符，单个请求条件最大支持5个。
- 不支持"null"和空字符串等条件值匹配。
 
#### 相关API接口：
[灵活搜索设备列表](https://support.huaweicloud.com/api-iothub/SearchDevices.html)
