JIRA的使用介绍(四)- 高级搜索(JQL)

JIRA的高级搜索功能超级好用,使用了自带的JQL查询语言,有点类似于SQL的语法,但是做了扩充和简化。

什么是高级搜索?

高级搜索可以让你使用结构化查询搜索JIRA问题单。搜索结果将显示在问题导航器,你可以将其导出到MS Excel等多种格式。你还可以保存和订阅你的高级搜索。
当你执行高级搜索时,你是用的是JIRA搜索语言(JQL)。JQL简单查询(也称为一个“语句”)包括一个字段,包括一个运算符、一个或多个值或功能。例如,下面的简单的查询会搜索在“XRTP2”项目中的所有问题单:

    project = "Xray Test Project Sample 2"  
Advanced search

如何执行高级搜索

  1. 选择Issues > Search for Issues将出现问题导航界面。
    • 如果有现有的搜索条件,请单击New filter按钮复位搜索条件。
    • 如果Advanced是以链接显示,点击该链接切换到高级搜索。
  2. 使用字段、运算符、字段值或函数输入查询条件。
  3. 点击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多种信息都会自动匹配到用户的名。自动填写推荐不提供函数参数。
image.png
  • 注意:
    如果自动填写推荐没有出现,可能是因为你的管理员关闭了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有以下保留的字符:
Reserved characters

如果你需要在查询中作为内容来使用这些字符,就需要做如下转化:

  • 用单引号或双引号把他们包起来
  • 在前面放两个反斜杠
    举例:
  •    version = "[example]"
    
  •    summary ~ "\\[example\\]"
    

特性介绍和举例

1. WAS运算符

WAS运算符包括Was,Was in,Was not,Was not in

WAS

这个运算符可以查找当前或曾经的一个状态,例如:

    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"

推荐阅读更多精彩内容