add search syntax introduction

This commit is contained in:
Pig Fang 2020-07-16 22:18:40 +08:00
parent 924d4b9f8b
commit c65e34f823
No known key found for this signature in database
GPG Key ID: A8198F548DADA9E2
2 changed files with 154 additions and 0 deletions

View File

@ -62,6 +62,7 @@ link = '/api/'
'/flarum',
'/artisan-cli',
'/web-cli',
'/search-syntax',
'/css-js',
'/bench',
'/v5-release-note',

153
man/search-syntax.md Normal file
View File

@ -0,0 +1,153 @@
# 搜索语法
从 Blessing Skin v5 起,「用户管理」和「角色管理」中的筛选和排序功能被整合到管理列表上方的搜索框中。通过运用符合语法的查询,可以实现灵活的筛选和排序。
## 搜索
### 精确搜索
列表中的大部分字段支持精确搜索。例如,查找 UID 为 1 的用户可以使用这样的查询:
```
uid = 1
```
也可以使用冒号(`:`,半角的)代替等号(`=`
```
uid: 1
```
上面的语句中,空格不会影响查询。
再来一些例子:
查询某个邮箱地址对应的用户:
```
email = 'a@b.c'
```
单引号可以改为双引号。但无论使用哪种引号,都必须是半角的引号:
```
email = "a@b.c"
```
### 指定比较关系的搜索
查询中还可以使用 `>`、`<`、`>=`、`<=` 操作符。这些操作符不仅适用于数字(包括整数和小数),还适用于日期。
例如,查找积分超过 50 分的用户:
```
score > 50
```
或查找注册时间在 2020-01-01 00:00:00 之后的用户:
```
register_at > '2020-01-01 00:00:00'
```
注意使用日期时要 **加上** 引号。
此外,按日期查找时,还可以使用 `today``tomorrow` 等相对日期:
```
register_at >= today
```
此时 **不需要** 加上引号。
### 模糊搜索
有几个字段可以进行模糊搜索。目前支持模糊搜索的字段有:
- 用户模型中的 `email` 字段
- 用户模型中的 `nickname` 字段
- 角色模型中的 `name` 字段
使用模糊搜索时,不必像「精确搜索」那样指定字段名,而且搜索时也不需要完全匹配。
例如,假设有两个用户,邮箱地址分别为 `abc@test.test``bcd@test.test`,当使用模糊搜索时,可以直接在搜索框中输入:
```
bc
```
那么这两个用户都会被搜索到。
相比之下,如果输入:
```
email = 'bc'
```
这时没有用户会被匹配到,因为这是精确搜索。
### 逻辑操作符
目前支持的逻辑操作符有 `not`、`and` 和 `or`
查找积分不超过 50 分的用户:
```
not score>50
```
查找积分超过 50 分并且 UID 大于 100 的用户:
```
score > 50 and uid > 100
```
查找积分超过 50 分或 UID 大于 100 的用户:
```
score > 50 or uid > 100
```
使用时,可添加半角括号来明确表达式的优先级:
```
(score < 50 or uid < 100) and uid > 2000
```
上面的查询语句表示:查找 UID 大于 2000 的用户,同时也查找积分小于 50 分或 UID 小于 100 的用户。
## 排序
若要指定排序,只需要在查询语句中添加 `sort:` 再加字段名即可。默认为升序。
如:
```
sort:register_at
```
这表示按注册时间的升序进行排序。
如果需要降序排序,在字段名前加 `-` 即可:
```
sort:-register_at
```
## 查询数量限制
尽管这个功能很少用,但我们还是可以在查询语句中限制查询条目数量,就像 SQL 那样:
```
limit:5 from:7
```
这表示从第 8 条开始,并且只查询 5 条记录。
::: tip
`limit` 参数和 `from` 参数可以各自单独使用。
:::