JIRA的高级搜索功能超级好用,使用了自带的JQL查询语言,有点类似于SQL的语法,但是做了扩充和简化。
什么是高级搜索?
高级搜索可以让你使用结构化查询搜索JIRA问题单。搜索结果将显示在问题导航器,你可以将其导出到MS Excel等多种格式。你还可以保存和订阅你的高级搜索。
当你执行高级搜索时,你是用的是JIRA搜索语言(JQL)。JQL简单查询(也称为一个“语句”)包括一个字段,包括一个运算符、一个或多个值或功能。例如,下面的简单的查询会搜索在“XRTP2”项目中的所有问题单:
project = "Xray Test Project Sample 2"
如何执行高级搜索
- 选择Issues > Search for Issues将出现问题导航界面。
- 如果有现有的搜索条件,请单击New filter按钮复位搜索条件。
- 如果Advanced是以链接显示,点击该链接切换到高级搜索。
- 使用字段、运算符、字段值或函数输入查询条件。
- 点击Search按钮执行查询。
执行文本搜索
当在以下字段执行搜索时,可以使用Lucene的文本搜索功能的CONTAINS运算符:
- Summary
- Description
- Environment
- Comments
- custom 字段采用“自由文本搜索器”,包括以下内置自定义字段类型:
- Free Text Field (无限制文本)
- Text Field (< 255字节)
- Read-only Text Field
在JQL中使用文本字段的"some words"值搜索问题。这会搜索所有文本自定义字段如总结、描述、环境、评论。如果你有很多文本自定义字段,你可以通过搜索特定的字段来改进搜索,例如:
Summary ~ "some words" OR Description ~ "some words"
使用自动填写功能
当你在输入查询条件时,JIRA会自动识别上下文并提供一个自动填写推荐列表。自动填写推荐列表按字母顺序排列,包括前15个匹配值。值得一提的是这个自动填写功能还可以支持模糊的匹配,输入User多种信息都会自动匹配到用户的名。自动填写推荐不提供函数参数。- 注意:
如果自动填写推荐没有出现,可能是因为你的管理员关闭了JIRA实例的该功
自动填写推荐不会出现在所有字段。点击字段参考查看那些字段支持自动填写。
在高级搜索和简单搜索之间切换
通常情况下,使用“简单搜索”创建查询可能会被转换成“高级搜索”(JQL),然后再简单查询。然而,使用“高级搜索”创建查询就不会被转换成“简单搜索”,特别是当:
- 查询包含OR运算符(注意你可以使用IN运算符,但它将被转换,例如:project in (A, B))
- 例:尽管(project = JRA OR project = CONF)查询等同于(project in (JRA, CONF)),但只有第二个查询会被转换
- 查询包含NOT运算符
- 查询包含EMPTY运算符
- 查询包含任何!=, IS, IS NOT, >, >=, <, <=运算符
- 查询指定相关项目中的字段和值(如版本,组成,自定义字段),并且该项目没有明确包括在查询中(如fixVersion=“4.0”,没有AND project=JRA)。这些自定义字段特别棘手,因为它们可以在一个项目/问题类型的基础上进行配置。一般的经验规则是,如果该查询不能在“简单搜索”的形式创建,那么如果使用“高级搜索”创造该查询,那么该查询将不会被转换成'简单搜索'。
设置运算符优先
你可以通过使用括号来强调JQL语句中运算符的优先级。例如,如果你想查找X项目中所有被解决的问题,以及目前被分配给系统管理员(leo)的问题。你可以在你的查询中使用括号强制执行布尔运算符的优先级,即:
(status=resolved AND project=X) OR assignee=leo
需要注意的是,如果你不使用括号,该语句将使用运算符优先级评估。你还可以使用括号来组合语句,这样就可以将NOT运算符应用于组。
如果你添加括号强制符的优先级,但他们没有严格要求的运算符优先级执行但返回相同的结果,当你保存查询时JIRA会删除你查询语句里面的优先级。
JQL的保留关键字
JQL有以下保留的字符:如果你需要在查询中作为内容来使用这些字符,就需要做如下转化:
- 用单引号或双引号把他们包起来
- 在前面放两个反斜杠
举例: version = "[example]"
summary ~ "\\[example\\]"
特性介绍和举例
1. WAS运算符
WAS运算符包括Was,Was in,Was not,Was not in
这个运算符可以查找当前或曾经的一个状态,例如:
assignee WAS "leo"
这个用于查找当前或曾经分配给leo的所有问题,这个功能很实用也很强大。
2. CHANGED运算符
CHANGED运算符用于查找问题单的某个特定字段被变更过了。这个运算符有以下一些常见用法:
- AFTER "date"
- BEFORE "date"
- BY "username"
- DURING ("date1","date2")
- ON "date"
- FROM "oldvalue"
- TO "newvalue"
备注: CHANGED运算符常被用于Assignee, Fix Version, Priority, Reporter, Resolution, and Status这些字段。
举例
assignee CHANGED
status CHANGED FROM "In Progress" TO "Open"
priority CHANGED BY freddo BEFORE endOfWeek() AFTER startOfWeek()
2. 查询是否带有附件
示例:
查询带有附件的问题:
attachments IS NOT EMPTY
查询不带附件的问题:
attachments IS EMPTY
3. 查询包含特定文本
示例:
查找评论里包含有"My PC is quite old"的问题(模糊匹配):
comment ~ "My PC is quite old"
查询评论里含有完整语句"My PC is quite old"的问题:
comment ~ "\"My PC is quite old\""
4. 日期相关
查找某个特定日期前或后创建的问题(或某个日期范围)。注意,如果没有指定具体时间,默认为凌晨00:00。查询结果是根据你的JIRA服务器设置的时区。使用如下格式:
"yyyy/MM/dd HH:mm"
"yyyy-MM-dd HH:mm"
"yyyy/MM/dd"
"yyyy-MM-dd"
或者使用"w" (周), "d" (天), "h" (小时)或"m" (分钟)来指定相对于当前时间的日期。默认为“M”(分钟)。一定要使用引号(“);如果省略了引号标记,你提供的数字将被解释为纪元(1970-1-1)之后的毫秒。
注:该字段不支持自动填写功能。
支持的函数
当使用 EQUALS, NOT EQUALS, GREATER THAN, GREATER THAN EQUALS, LESS THAN 或LESS THAN EQUALS运算符时,该字段支持:
currentLogin()
lastLogin()
now()
startOfDay()
startOfWeek()
startOfMonth()
startOfYear()
endOfDay()
endOfWeek()
endOfMonth()
endOfYear()
示例:
查找2010年12月12日00:00点之前创建的所有问题:
created < "2010/12/12"
查找2010年12月12日创建或2010年12月12日之前创建的所有问题:
created <= "2010/12/13"
查找2010年12月12日下午2点之前创建的所有问题:
created > "2010/12/12" and created < "2010/12/12 14:00"
查找创建不足一天的问题:
created > "-1d"
查找在2011年1月创建的所有问题:
created > "2011/01/01" and created < "2011/02/01"
查找在2011年1月15日创建的所有问题:
created > "2011/01/15" and created < "2011/01/16"