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)
更深入了解
如果您想了解更多关于查询语言的内容,请参阅 查询语言参考。