天天看点

内容协作平台-文件搜索介绍

详细文当见官网: https://help.aliyun.com/product/125177.html

用户可以通过/file/search接口搜索自己drive下的文件

query规则说明:

  1. 支持的数据类型:
    1. 基本类型:long、string、bool、double
    2. 复合类型:array,date(时间类型,ISO时间: "2019-08-13T06:19:22.870Z")
  2. 基本类型支持的搜索:
    1. long: =, <, >, <=, >=
    2. string: = (精确搜索), prefix(前缀搜索), match(模糊搜索,只有name字段支持)
    3. bool: =
    4. double: =, <, >, <=, >=
  3. 复合类型支持的搜索:
    1. array: in (多条件的=)
    2. date: =, <, >, <=, >=
  4. 逻辑操作支持:not、and、or
  5. 支持括号,优先级为: “括号 > not > and > or”
query举例:
  1. 精确查询。
// 查询文件名为 “汇报材料.ppt” 的文件
name = "汇报材料.ppt"           
  1. 范围查询
查询2019年1月14日前创建的文件
created_at < "2019-01-14T00:00:00"           
  1. 模糊匹配
// 查询文件名包含 “汇报” 的文件
name match "汇报"           
  1. 逻辑组合查询
// 查询2019年1月14号创建的文件
created_at > "2019-01-14T00:00:00" and created_at < "2019-01-15T00:00:00"           
  1. 复杂逻辑查询
// 查询文件size大于1024并且hidden为false并且file_extension不等于“mp4”的文件
size > 1024 and hidden = false and not file_extension = 'mp4'           
  1. 数组查询
// 查询后缀名为jpg、png或者gif的文件
file_extension in ["jpg", "png", "gif"]           
  1. 前缀查询
// 查询文件名为“项目1”开头的文件
name prefix "项目1"           
order_by规则:
  • ASC代表正序,DESC代表逆序
  • 语法为 字段名 + 空格 + ASC/DESC
  • 如果多个字段排序则需要用逗号隔开
  • 前面的规则优先级高
order_by举例:
  1. 单个规则正序
// 按名称正序
name ASC           
  1. 单个规则逆序
// 按创建时间逆序
created_at DESC           
  1. 多个排序规则
// 先按创建时间逆序,如果创建时间相同,则按名称正序
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