详细文当见官网:https://help.aliyun.com/product/125177.html
用户可以通过/file/search接口搜索自己drive下的文件
query规则说明:
支持的数据类型:
- 基本类型:long、string、bool、double
- 复合类型:array,date(时间类型,ISO时间: "2019-08-13T06:19:22.870Z")
基本类型支持的搜索:
- long: =, <, >, <=, >=
- string: = (精确搜索), prefix(前缀搜索), match(模糊搜索,只有name字段支持)
- bool: =
- double: =, <, >, <=, >=
复合类型支持的搜索:
- array: in (多条件的=)
- date: =, <, >, <=, >=
- 逻辑操作支持:not、and、or
- 支持括号,优先级为: “括号 > not > and > or”
query举例:
- 精确查询。
// 查询文件名为 “汇报材料.ppt” 的文件
name = "汇报材料.ppt"
- 范围查询
查询2019年1月14日前创建的文件
created_at < "2019-01-14T00:00:00"
- 模糊匹配
// 查询文件名包含 “汇报” 的文件
name match "汇报"
- 逻辑组合查询
// 查询2019年1月14号创建的文件
created_at > "2019-01-14T00:00:00" and created_at < "2019-01-15T00:00:00"
- 复杂逻辑查询
// 查询文件size大于1024并且hidden为false并且file_extension不等于“mp4”的文件
size > 1024 and hidden = false and not file_extension = 'mp4'
- 数组查询
// 查询后缀名为jpg、png或者gif的文件
file_extension in ["jpg", "png", "gif"]
- 前缀查询
// 查询文件名为“项目1”开头的文件
name prefix "项目1"
order_by规则:
- ASC代表正序,DESC代表逆序
- 语法为 字段名 + 空格 + ASC/DESC
- 如果多个字段排序则需要用逗号隔开
- 前面的规则优先级高
order_by举例:
- 单个规则正序
// 按名称正序
name ASC
- 单个规则逆序
// 按创建时间逆序
created_at DESC
- 多个排序规则
// 先按创建时间逆序,如果创建时间相同,则按名称正序
created_at DESC, name ASC
支持搜索和排序的字段
| 字段名 | 类型 | 可搜索 | 可排序 | 描述 |
| --- | --- | --- | --- | --- |
| parent_file_id | STRING | ✔️ | -- | 固定目录搜索,只搜索一级 |
| name | STRING | ✔️ | ✔️ | 文件名(模糊分词),可模糊搜索 |
| type | STRING | ✔️ | ✔️ | 文件类型file、folder |
| file_extension | STRING | ✔️ | -- | 文件后缀名 |
| description | STRING | ✔️ | -- | 描述(single_word分词),可短语匹配 |
| mime_type | STRING | ✔️ | -- | 文件mimeType搜索 |
| starred | BOOL | ✔️ | -- | 是否收藏 |
| created_at | DATE | ✔️ | ✔️ | 创建时间 |
| updated_at | DATE | ✔️ | ✔️ | 修改时间 |
| status | STRING | ✔️ | -- | 文件状态 |
| trashed | BOOL | ✔️ | -- | 是否移入回收站 |
| explicitly_trashed | BOOL | ✔️ | -- | 是否显式移入回收站 |
| hidden | BOOL | ✔️ | --| 是否隐藏文件 |
| size | LONG | ✔️ | ✔️| 文件大小 |
| image_time | DATE | ✔️ | ✔️ | 照片拍摄时间 |
| label | STRING | ✔️ | -- | 系统标签名称 |
| category | STRING | ✔️ | -- | 文件类型,image、video、doc、audio、app、others |
- LONG: 长整型(int64)
- BOOL: 布尔类型
- DATE: 时间类型,用双引号或单引号括起来,与字符串类型一致。格式"2006-01-02T00:00:00",默认零时区。
- STRING: 字符串类型
实现介绍,基于antlr4实现
查看语法树
# 第一步,生成java版的解析器
antlr SearchParser.g4
# 第二步,生成可执行文件
javac SearchParser*.java
# 第三步,生成语法树
grun SearchParser start -gui
这里输入待解析的字符串,ctrl+D 结束
# 如果javac出错执行
cd /usr/local/lib
$ sudo curl -O https://www.antlr.org/download/antlr-4.7.2-complete.jar
export CLASSPATH=".:/usr/local/lib/antlr-4.7.2-complete.jar:$CLASSPATH"
# 参考 https://www.antlr.org/
效果:
Goland查看语法树插件
在需要测试的语法上点右键, 选择Test Rule xxx
效果如下:
生成Go语言的Visitor模式
antlr -no-listener -visitor -Dlanguage=Go -package grammar SearchParser.g4
# -package grammar表示生成的代码的包名为grammar