Quickwit 查询语言介绍
Quickwit 允许您使用一种简单的查询语言在已索引的文档上进行搜索。下面是一个快速概述。
子句
这种语言的主要概念是子句,它表示一个可以针对文档进行测试的简单条件。
查询字段
一个子句作用于您的文档的字段上。它的语法如下:
field:condition
例如,当搜索包含 tantivy 的 app_name 字段的文档时,您可以写出如下子句 :
app_name:tantivy
在许多情况下,字段名称可以省略,这时 Quickwit 会使用为索引配置的 default_search_fields。
条件子句速查表
Quickwit 支持多种类型的子句来表达不同种类的条件。这里有一个快速概述:
| type | syntax | examples | description | default_search_field |
|---|---|---|---|---|
| term | field:token | app_name:tantivy process_id:1234 word | term 子句检测字段中的某个值是否存在 | yes |
| term prefix | field:prefix* | app_name:tant* quick* | term 子句检测字段中 的某个令牌是否以提供的值开头 | yes |
| term set | field:IN [token token ..] | severity:IN [error warn] | term 集合子句检测字段中的令牌集合中是否包含任何一个提供的值 | yes |
| phrase | field:"sequence of tokens" | full_name:"john doe" | phrase 子句检测提供的令牌序列是否存在于字段中 | yes |
| phrase prefix | field:"sequence of tokens"* | title:"how to m"* | phrase 前缀子句检测一个令牌序列是否存在,其中最后一个令牌的匹配方式与前缀子句相同 | yes |
| all | * | * | 匹配所有子句将匹配所有文档 | no |
| exist | field:* | error:* | 存在子句检测字段是否存在任何值,只有当字段存在时才会匹配 | no |
| range | field:bounds | duration:[0 TO 1000} last_name:[banner TO miller] | range 子句检测字段中的某个令牌是否在提供的范围内 | no |
查询
结合查询
可以使用布尔运算符 AND 和 OR 来组合子句,从而创建更复杂的搜索表达式。
AND 查询仅在运算符两侧的条件都满足时才匹配。
type:rose AND color:red
OR 查询在运算符两侧任一条件或两个条件都满足时匹配。
weekday:6 OR weekday:7
如果没有提供运算符,默认隐含为 AND。
type:violet color:blue
组合查询
可以通过使用括号来组合子句构建复杂的表达式。
(type:rose AND color:red) OR (type:violet AND color:blue)
当没有使用括号时,AND 的优先级高于 OR,这意味着下面的查询等同于上面的查询。
type:rose AND color:red OR type:violet AND color:blue
否定查询
可以通过使用运算符 NOT 或者在查询前加上破折号 - 来否定一个表达式。
NOT 和 - 的优先级高于其他运算符,因此 -a AND b 意味着 (-a) AND b,而不是 -(a AND b)。
NOT severity:debug
or
type:proposal -(status:rejected OR status:pending)
更深入了解
如果您想了解更多关于查询语言的内容,请参阅 查询语言参考。