Структуру JQL-запросов без примеров сложно понять специалистам, не знакомым ранее с JIRA.

Мы уже успели рассказать про быстрый и базовый поиск. Теперь же прейдем к самому мощному из трех методов — к продвинутому поиску.

В этом режиме вы можете указывать критерии, которые нельзя задавать в остальных предыдущих двух режимах (например, сортировку ORDER BY). Но придётся освоить создание структурированных запросов с помощью JIRA Query Language (JQL).



Для использования «продвинутого» поиска перейдите в пункт меню Поиск --> Поиск запросов.

А если вы находитесь в режиме «базового» поиска, нажмите кнопку «Продвинутый»





1. Создание JQL-запросов

Простейший запрос на JQL состоит из поля, за которым следует оператор, а затем одно или несколько допустимых значений для этого поля. Например:

project = «YAT»

Такой запрос поможет найти все задачи проекта «YAT». Здесь использовано поле «project», оператор эквивалента "=" и допустимое значение «YAT».

Более сложный запрос может выглядеть так:

project = «YAT» AND assignee = currentuser()

Так мы отберём все задачи проекта «YAT», назначенные на текущего пользователя
(то есть на вас). В запросе содержатся: логический оператор «AND», поле «assignee» для отбора задач по текущему пользователю, оператор эквивалента "=" и функция «currentuser()», возвращающая имя текущего пользователя системы.

При создании запроса в режиме «продвинутого» поиска JIRA показывает список всех возможных операторов для поля запроса.

Также JIRA показывает список доступных значений для полей "AffectedVersion", "FixVersion", "Components", кастомных полей формата "Version" и выпадающих списков.

При использовании в поиске полей формата "User" JIRA позволяет найти необходимого пользователя по его фамилии.

Вы можете использовать круглые скобки в сложных JQL-запросах. Например, если хотите найти все разрешенные задачи в проекте «SysAdmin», а также все задачи (любого статуса, любого проекта), назначенные в настоящее время системному администратору (admin), то можете использовать круглые скобки, обозначая приоритет логических операторов в запросе.

(project=SysAdmin AND status=resolved) OR assignee=admin

Внимание!

В JQL есть зарезервированные символы.
символ + . , ; ? | * / % ^ $ # @ [ ]

Если хотите использовать один из них в запросе, то необходимо:
  1. выделить текст, содержащий специальный символ, либо двойными кавычками ("......"), либо одинарными ('......');
  2. если в тексте поиска есть один из перечисленных ниже символов, то перед ним обязательно проставляется двойной backslashe ("\\").
    + — & |! ( ) { } [ ] ^ ~ *? \ :

Пример:
summary ~ "\\[example\\]"

Внимание!
Также в JIRA есть зарезервированные слова.

Если в тексте поиска упомянуто одно из перечисленных ниже слов, этот текст нужно выделить либо двойными кавычками ("......"), либо одинарными ('......').

Список зарезервированных слов:
A «abort», «access», «add», «after», «alias», «all», «alter», «and», «any», «as», «asc», «audit», «avg»
B «before», «begin», «between», «boolean», «break», «by», «byte»
C «catch», «cf», «char», «character», «check», «checkpoint», «collate», «collation», «column», «commit», «connect», «continue», «count», «create», «current»
D «date», «decimal», «declare», «decrement», «default», «defaults», «define», «delete», «delimiter», «desc», «difference», «distinct», «divide», «do», «double», «drop»
E «else», «empty», «encoding», «end», «equals», «escape», «exclusive», «exec», «execute», «exists», «explain»
F «false», «fetch», «file», «field», «first», «float», «for», «from», «function»
H «having»
I «identified», «if», «immediate», «in», «increment», «index», «initial», «inner», «inout», «input», «insert», «int», «integer», «intersect», «intersection», «into», «is», «isempty», «isnull»
J «join»
L «last», «left», «less», «like», «limit», «lock», «long»
M «max», «min», «minus», «mode», «modify», «modulo», «more», «multiply»
N «next», «noaudit», «not», «notin», «nowait», «null», «number»
O «object», «of», «on», «option», «or», «order», «outer», «output»
P «power», «previous», «prior», «privileges», «public»
R «raise», «raw», «remainder», «rename», «resource», «return», «returns», «revoke», «right», «row», «rowid», «rownum», «rows»
S «select», «session», «set», «share», «size», «sqrt», «start», «strict», «string», «subtract», «sum», «synonym»
T «table», «then», «to», «trans», «transaction», «trigger», «true»
U «uid», «union», «unique», «update», «user»
V «validate», «values», «view»
W «when», «whenever», «where», «while», «with»


2. Использование шаблонов для поиска по тексту

Специальные символы могут быть использованы для определения шаблонов поиска по тексту. Рассмотрим несколько примеров:
Знак Область применения и описание Пример
? "?" используется для замены одного символа в шаблоне.
Например, написание слов «text» и «test» отличается
одним символом. Для поиска обоих вариантов достаточно
задать шаблон: te?t
summary~«te?t»
* "*" используется для замены в текстовом шаблоне
нуля или нескольких символов. Например, для отбора текста
«Windows», «Win95» или «WindowsNT» можно использовать
шаблон: win*
Для отбора текста «Win95» или «Windows95»
можно использовать шаблон: wi*95
summary~«wi*95»
~ "~" может быть использована для задания
нечетких поисковых шаблонов. В этом случае символ "~"
подставляется в конце нужного слова. Например,
чтобы найти термин, орфографически похожий на «roam»,
используйте шаблон: roam~
В результате могут быть найдены слова «foam» или «roams».

summary~«prox~»


3. Логические операторы JQL

Оператор Описание Пример
AND Логическая операция «И», соединяющая два или несколько условий. Используется для уточнения условий отбора.
project = «YAT» and status = «Оpen» — отобрать все задачи проекта «YAT»
в статусе «Open»
OR Логическая операция «ИЛИ», соединяющая два или несколько условий.
reporter = demo_1
or reporter = demo_2 — отобрать все задачи проекта, автором которых
является пользователь demo_1
или пользователь demo_2.
NOT Для реверсирования результата логического условия. not assignee = demo_1 —
отобрать все задачи, автором которых
не является пользователь demo_1.
ORDER BY Сортировать по.

По умолчанию будет использоваться собственный порядок,
применяемый для этого поля. Вы можете переопределить направление сортировки —
по возрастанию («asc») или убыванию («desc»).
duedate = empty order by created —
отобрать все задачи, у которых пустые поля «Due date» (Срок исполнения),
отсортировать результаты выборки по полю «Created» (Создано).

duedate = empty order by created, priority desc —
отобрать все задачи, у которых пустые поля «Due date» (Срок исполнения),
отсортировать результаты выборки по полю «Created» (Создано)
в собственном порядке, затем по полю «Priority» (Приоритет)
в убывающем порядке.

4. Операторы сравнения JQL
Оператор Описание Пример
= Эквивалент.

Используется для задания
критерия полного соответствия.
reporter = demo_1
!= Не равен.

Используется для задания критерия поиска,
который однозначно говорит, что в найденной
задаче определенное поле не должно содержать
определенного значения.
reporter != demo_1

либо можно использовать запись
NOT reporter = demo_1
> Больше, чем.

Используется для создания выражений
с полями формата «Version»,
формата дата-время и числовых полей.
votes > 4
duedate > now()
>= Больше либо равно.

Используется для создания выражений
с полями формата «Version»,
формата дата-время и числовых полей.
votes >= 4
duedate >= «2008/12/31»
created >= "-5d"
< Меньше, чем.

Используется для создания выражений
с полями формата «Version»,
формата дата-время и числовых полей.
votes < 4
duedate < now()
<= Меньше либо равно.

Используется для создания выражений
с полями формата «Version»,
формата дата-время и числовых полей.
updated <= "-4w 2d"
IN Используется для отбора задач по наличию
в определенном поле одного из значений.

Набор вариантов значений выделяется с двух сторон
круглыми скобками, варианты внутри скобок
перечисляются через запятую.
affectedVersion in («3.14», «4.2»)
reporter in (demo_1, demo_2)
or assignee in (demo_1, demo_2)
NOT IN Используется для отбора задач,
в определенном поле которых не содержится
ни одно из перечисленных значений.

Набор вариантов значений выделяется с двух сторон
круглыми скобками, варианты внутри скобок
перечисляются через запятую.
FixVersion not in (A, B, C, D)

либо можно использовать запись
not FixVersion in (A, B, C, D)
~ Содержит.

Используется исключительно для критериев
отбора по текстовым полям.
summary ~ win
summary ~ «issue collector»
!~ Не содержит.

Используется исключительно для критериев
отбора по текстовым полям.
summary !~ «issue collector»

либо можно использовать запись
not summary ~ «issue collector»
IS Этот оператор можно использовать
только со значениями EMPTY или NULL.

Используется для поиска задач, определенное поле
которых не содержит значений.
fixVersion is empty
IS NOT Этот оператор можно использовать
только со значениями EMPTY или NULL.

Применяется для поиска задач, определенное
поле которых обязательно задано.
affectedVersion is not empty
WAS Для отбора задач, определенное поле
которых ранее имело указанное значение.

Применимо исключительно к полям:

  • «Reporter» (Автор);
  • «Assignee» (Исполнитель);
  • «Fix Version» (Исправлено в версиях);
  • «Affected Version» (Проявляется в версиях);
  • «Priority» (Приоритет);
  • «Status» (Статус);
  • «Resolution» (Решение).

Оператор WAS также может иметь следующие необязательные предикаты:

  • AFTER «date»
  • BEFORE «date»
  • BY «username»
  • DURING («date1»,«date2»)
  • ON «date»

status WAS «In Progress» — для отбора задач,
когда-либо находившихся в статусе «In Progress».

status WAS «Resolved» BY demo_1 BEFORE «2011/02/02» —
для отбора задач, переведенных в статус «Resolved»
пользователем demo_1 до даты «2011/02/02».
WAS IN Для отбора задач, определенное поле
которых ранее содержало одно из перечисленных значений.

Область применения и предикаты, применяемые для
оператора WAS IN, те же, что и для оператора WAS.
status WAS IN («Resolved»,«In Progress»)
BEFORE «2011/02/02» — для отбора задач, переведенных
в статус «Resolved» или «In Progress» до даты «2011/02/02».
WAS NOT IN Для отбора задач, которые никогда,
либо до некоторого момента, не содержали в определенном
поле ни одно из перечисленных значений.

Область применения и предикаты, применяемые для оператора WAS NOT IN,
те же, что и для оператора WAS.
status WAS NOT IN («Resolved»,«In Progress»)
BEFORE «2011/02/02» — для отбора задач, ранее не находившихся
в статусах «Resolved» и «In Progress»
до даты «2011/02/02».
WAS NOT Для отбора задач, которые никогда,
либо до некоторого момента, не содержали в определенном
поле заданного значения.

Область применения и предикаты, применяемые для оператора WAS NOT,
те же, что и для оператора WAS.
status WAS NOT «In Progress»
BEFORE «2011/02/02» — для отбора задач, ранее не находившихся
в статусе «In Progress» до даты «2011/02/02».
CHANGED Для отбора задач, заданное поле которых было изменено.

Применимо исключительно к полям:

  • «Reporter» (Автор);
  • «Assignee» (Исполнитель);
  • «Fix Version» (Исправлено в версиях);
  • «Affected Version» (Проявляется в версиях);
  • «Priority» («Приоритет);
  • »Status" (Статус);
  • «Resolution» (Решение).

Оператор WAS также может иметь следующие необязательные предикаты:

  • AFTER «date»
  • BEFORE «date»
  • BY «username»
  • DURING («date1»,«date2»)
  • ON «date»
  • FROM «oldvalue»
  • TO «newvalue»

assignee CHANGED — для отбора задач, исполнитель
которых был изменен.

status CHANGED FROM «In Progress» TO «Open» — для отбора задач
статус, которых был изменен с «In Progress» обратно на «Open».
priority CHANGED BY demo_1 BEFORE endOfWeek()

AFTER startOfWeek() — для отбора задач, приоритет которых
был изменен в период текущей недели пользователем demo_1.

5. Функции JQL
Функция Описание Синтаксис Доступные операторы Примеры
approved() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования, окончательное решение по которым одобрено.

Применяется к полям типа «Approvals».
approved() = approval =
approved()
approver() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования
или уже согласованные одним или всеми из указанных пользователей.

Применяется к полям типа «Approvals».
approver
(user,user)
= approval = approver (demo_1,
demo_2)
cascade
Option()
Для отбора задач по значению каскадного поля (полей зависимых списков). cascadeOption
(parentOption)

cascadeOption
(parentOption,
childOption)
IN, NOT IN «Вид запроса» in cascadeOption («Застройщик»,
«Пролонгация»)
closed
Sprints()
Применимо к полю «Sprint».
Для отбора задач, добавленных в завершенные спринты.
closedSprints() IN, NOT IN sprint in
closedSprints()
components
LeadByUser()
Применимо
к полю «Components» (Компоненты).

Для отбора задач, в поле «Components» (Компоненты) которых выбран компонент, лидом которого являетесь вы сами или выбранный вами пользователь.
Components
LeadByUser()
используется
для отбора задач
по текущему пользователю
components
LeadByUser
(username)
IN, NOT IN component
in components
LeadByUser() —
лидом
компонентов
являетесь вы сами.

component
in components
LeadByUser
(demo_1) —
лидом
компонентов
является
пользователь
demo_1.
current
Login()
Возвращает время начала сеанса текущего пользователя.

Используется в выражениях с полями «Created» (Создано),
«Due Date»
(Срок исполнения), «Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
currentLogin() =, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
currentLogin()
currentUser() Возвращает логин текущего авторизованного пользователя.

Используется для создания выражений с полями «Reporter»
(Автор ),
«Assignee»
(Исполнитель ), «Voter», «Watcher» и кастомными полями формата «User».
currentUser() =, != reporter =
currentUser()

assignee !=
currentUser()
OR assignee is
EMPTY
earliest
Unreleased
Version()
Для поиска на основе самой ранней не выпущенной версии (т. е. следующей версии, которая должна быть выпущена) указанного проекта.

Внимание
Самая ранняя не выпущенная версия определяется порядком, а не датами.

Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях"), «FixVersion» (Исправлено в версиях), кастомными полями формата Version.
earliest
Unreleased
Version(project)
IN, NOT IN affectedVersion =
earliestUnreleased
Version
(ABC)

fixVersion =
earliestUnreleased
Version
(ABC)
endOfDay() Для поиска по концу текущего дня.

Используется в выражениях с полями
«Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата даты-времени.
endOfDay()

endOfDay(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 день.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
due
< endOfDay() —
срок исполнения
до конца
текущего дня.

due < endOfDay
("+1") —
срок исполнения
до конца
завтрашнего дня.
endOfMonth() Для поиска по концу текущего месяца.

Используется в выражениях с полями «Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
endOfMonth()

endOfMonth(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 месяц.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
due
< endOfMonth() —
срок исполнения
до конца
текущего месяца.

due < endOfMonth
("+15d") —
срок исполнения до
15-го числа
следующего месяца.
endOfWeek() Для поиска по концу текущей недели.

Используется в выражениях с полями «Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
endOfWeek()

endOfWeek(«inc»),

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 неделя.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
due
< endOfWeek() —
срок исполнения
до конца текущей
недели.

due < endOfWeek
("+1") —
срок исполнения
до конца
следующей недели.
endOfYear() Для поиска по концу текущего года.

Используется в выражениях с полями «Created»
(Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
endOfYear()

endOfYear(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 год.
Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
due < endOfYear() —
срок исполнения
до конца
текущего года.

due < endOfYear
("+3M") —
срок исполнения
до конца марта
следующего года.
issueHistory() Возвращает последние 50 просмотренных вами задач. issueHistory() IN, NOT IN issue in
issueHistory()
issuesWith
RemoteLinks
ByGlobalId()
Для отбора задач, имеющих внешние ссылки с определенными global ids.

Внимание
Функция позволяет вводить
идентификаторы global id
в количестве
от 1 до 100.
Пустой вызов функции
или вызов функции
с количеством параметров
> 100 приведет к ошибке.
issues
WithRemote
LinksByGlobalId()
IN, NOT IN issue in
issuesWithRemote
LinksByGlobalId
(abc, def)
lastLogin() Возвращает время начала предыдущего сеанса текущего пользователя.

Используется в выражениях с полями
«Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
lastLogin() =, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
lastLogin()
latest
Released
Version()
Для поиска на основе самой последней выпущенной версии указанного проекта.

Внимание
Самая последняя выпущенная версия определяется порядком, а не датами.

Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version.
latest
ReleasedVersion
(project)
=, != affectedVersion =
latestReleased
Version(ABC)

fixVersion =
latestReleased
Version(ABC)
linkedIssues() Для отбора задач по признаку наличия связи с определенной задачей.

Внимание
LinkType чувствителен к регистру.
linkedIssues
(issueKey)

linkedIssues
(issueKey,linkType)
IN, NOT IN issue in linkedIssues
(ABC-123,
«is duplicated by»)
membersOf() Для отбора задач по признаку принадлежности пользователя из определенного поля определенной JIRA-группе.

Используется для создания выражений с полями «Reporter» (Автор), «Assignee» (Исполнитель), «Voter», «Watcher» и кастомными полями формата «User».
membersOf
(Group)
IN, NOT IN assignee not
in membersOf(QA)
myApproval() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования текущего пользователя или уже согласованных текущим пользователем.
Применяется к полям типа «Approvals».
myApproval() = approval =
myApproval()
myPending() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования текущего пользователя.
Применяется к полям типа «Approvals».
myPending() = approval =
myPending()
now() Для поиска за текущее время.

Используется для создания выражений с полями «Reporter» (Автор), «Assignee» (Исполнитель), «Voter», «Watcher» и кастомными полями формата «User».
now() =, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
duedate < now()
and status not in
(closed, resolved)
openSprints() Применимо к полю «Sprint».

Для отбора задач, добавленных в незавершенные спринты
openSprints() IN, NOT IN sprint in
openSprints()
pending() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования.

Применяется к полям типа «Approvals».
pending() = approval =
pending()
pendingBy() Только для JIRA Service Desk.

Для отбора задач JIRA Service Desk, требующих согласования определенного(ых) пользователя(ей).

Применяется к полям типа «Approvals».
pendingBy
(user1,user2)

projectsLead
ByUser()
= approval =
pending(demo_1)

approval =
pending(demo_1,
demo_2)
projectsLead
ByUser()
Для отбора задач из проектов, на роль Project Lead которых назначен определенный пользователь.

Применяется к полю «Project».
projectsLeadByUser()
— для отбора задач
по текущему пользователю.

projectsLead
ByUser
(username)
IN, NOT IN project in
projectsLead
ByUser()
AND status = Open

project in
projectsLead
ByUser(demo_1)
AND status = Open
projects
WhereUser
Has
Permission()
Для отбора задач из проектов, в которых текущий пользователь имеет определенное разрешение.

Применяется к полю «Project».
projects
WhereUser
HasPermission
(permission)
IN, NOT IN project in
projectsWhere
UserHas
Permission
(«Resolve Issues»)
AND status = Open
projects
WhereUser
HasRole()
Для отбора задач из проектов, в которых текущий пользователь имеет определенную проектную роль.

Применяется к полю «Project».
projectsWhere
UserHasRole
(rolename)
IN, NOT IN project in
projectsWhere
UserHasRole
(«Developers»)
AND status = Open
released
Versions()
Для поиска по выпущенным версиям определенного проекта или сразу всем JIRA-проектам.

Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version.
ReleasedVersions() —
для отбора задач
по всем проектам.

releasedVersions
(project)
IN, NOT IN fixVersion in
releasedVersions
(ABC)

affectedVersion in
releasedVersions
(ABC)
standard
IssueTypes()
Для отбора задач родительского типа. standard
IssueTypes()
IN, NOT IN issuetype in
standard
IssueTypes()
startOf
Day()
Для поиска по началу текущего дня.

Используется в выражениях с полями «Created»
(Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
startOfDay()

startOfDay(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 день.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
startOfDay() –
задачи, созданные
за текущий день.

created >
startOfDay
("-3d") – задачи,
созданные за
последние три дня.
startOf
Month()
Для поиска по началу текущего месяца.

Используется в выражениях с полями
«Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
startOfMonth()

startOfMonth(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 месяц.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
startOfMonth() — задачи,
созданные за
текущий месяц

created > startOfMonth
("+14d") — задачи,
созданные с пятнадцатого
числа текущего месяца.
startOf
Week()
Для поиска по началу текущей недели.

Используется в выражениях с полями
«Created» (Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата даты-времени.
startOfWeek()

startOfWeek(«inc»),

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 неделя.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
startOfWeek()- задачи,
созданные за
текущую неделю.

created >
startOfWeek
("-1") — задачи,
дата создания которых
старше начала
прошлой недели.
startOf
Year()
Для поиска по началу текущего года.

Используется в выражениях с полями
«Created»
(Создано),
«Due Date»
(Срок исполнения),
«Resolved»
(Дата решения),
«Updated» (Обновлено), кастомными полями формата дата-время.
startOfYear()

startOfYear(«inc»)

где inc —
опциональный
инкримент
(±)nn(y|M|w|d|h|m).

Если спецификатор единицы
измерения времени опущен,
по умолчанию используется
естественный период функции,
т. е. 1 год.

Если опущен знак ±,
то по умолчанию предполагается +.
=, !=, >, >=, <, <=
в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED
created >
startOfYear() —
задачи созданные
за текущий год.

created >
startOfYear
("-1") — задачи,
дата создания
которых старше
начала прошлого года.
subtask
IssueTypes()
Для отбора подзадач. subtask
IssueTypes()
IN, NOT IN issuetype in
subtask
IssueTypes()
unreleased
Versions()
Для поиска по не выпущенным версиям определенного проекта или сразу всем JIRA-проектам.

Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version.
unreleasedVersions()
используется
для отбора задач
по всем проектам.

unreleased
Versions
(project)
IN, NOT IN fixVersion in
unreleased
Versions(ABC)
voted
Issues()
Для отбора задач, за которые вы отдали свой голос. votedIssues() IN, NOT IN issue in
votedIssues()
watched
Issues()
Для отбора задач, наблюдателем которых являетесь вы. watchedIssues() IN, NOT IN issue in
watchedIssues()


Надеюсь, что разбор продвинутого режима поможет вам при поиске задач.
Пользуйтесь и не теряйтесь ;)

Комментарии (24)


  1. maxzh83
    07.05.2019 15:16
    +1

    Подскажите, пожалуйста, как осуществить такой поиск:
    Есть список задач, у которых есть префикс, например «BE:». Я хочу найти все задачи, в которых есть префикс BE и слово «пользователь». Хочется написать вот так:

    summary ~ "BE:*пользователь*"

    Но это не работает, я так понял, что "*" работает только внутри слова и это вот очень странное поведение. Буду признателен, если подскажите как следует написать запрос.


    1. Apakc
      07.05.2019 15:31

      Проще всего будет
      summary ~ "BE" and summary ~ "пользователь"


      1. maxzh83
        07.05.2019 15:56

        Для некоторых кейсов работает, для некоторых нет (для префикса FE ищет, для BE — нет). Почему так происходит, непонятно. Из-за таких вот глюков особенностей возникает дикое негодование от пользования хорошим продуктом.


        1. Apakc
          07.05.2019 16:03

          Значит, причина в чем-то другом. Может быть там русские В или Е?
          Как правило, в конечном итоге приходит понимание что сам себе злой буратино. К JIRA есть много вопросов, но поиск, как раз, работает очень стабильно.


          1. aayatsenko Автор
            07.05.2019 16:15

            Apakc
            Проверил. Этот кейс действительно воспроизводится :-) С FE Работает :-)
            maxzh83
            А с этим кейсом в поддержку atlassian не обращались? :-) Уж очень интересное поведение :-)


            1. maxzh83
              07.05.2019 16:35

              Я в свое время искал причину, наткнулся на открытый баг, но потом забыл про это и просто не пользовался т.к. не понимал когда работает, а когда нет.


          1. maxzh83
            07.05.2019 16:36

            Может быть там русские В или Е?

            Нет, я тупо скопировал текст из заголовка.


      1. vmm86
        07.05.2019 16:22
        +1

        Возможен ещё вариант с помещением логического оператора внутрь строки:
        summary ~ "BE: AND пользователь"
        Но в обоих случаях падежи и числа русского языка не работают, по крайней мере, в JIRA 7.10.
        Если пытаться писать «пользователя», «пользователю», «пользователи» и т.п. — ответ будет одинаковым, содержащим все формы этого слова.


        1. Apakc
          07.05.2019 16:27

          aayatsenko vmm86 maxzh83 Ну что же мы велосипед изобретаем. Как я и говорил, сами себе злобные буратины:

          Документация

          Reserved words
          To keep the search index size and search performance optimal in Jira, the following English reserved words (also known as 'stop words') are ignored from the search index and hence, Jira's text search features:

          «a», «and», «are», «as», «at», «be», «but», «by», «for», «if», «in», «into», «is», «it», «no», «not», «of», «on», «or», «such», «that», «the», «their», «then», «there», «these», «they», «this», «to», «was», «will», «with»


          BE забукано атлассианом


          1. aayatsenko Автор
            07.05.2019 16:40

            Да. Я писал об этом. Экранировал \\ — не помогло :-)


            1. Apakc
              07.05.2019 16:54

              Тут экраном не обойтись. Ключевые слова из доков использовать в стандартном поиске вообще нельзя.
              Может быть, стоит эту статью заапдейтить этими ограничениями тоже?


              1. maxzh83
                07.05.2019 16:59

                Ключевые слова из доков использовать в стандартном поиске вообще нельзя.

                Замечательно. Как же это все «очевидно», конечно. Сначала догадайся что маска работает только на слово, а не на все текстовое поле. Потом держи в голове еще и слова, которые совсем нельзя использовать.


                1. Apakc
                  07.05.2019 17:05

                  Согласен. Штука дюже неочевидная.
                  Справедливости ради, отмечу, что за лет 8 ни разу не встречался с этим ограничением.


              1. aayatsenko Автор
                07.05.2019 17:58

                Да. Хорошая идея. Обязательно заапдейчу :-)


          1. maxzh83
            07.05.2019 16:42

            нужно выделить либо двойными кавычками ("......"), либо одинарными ('......')

            Вот так правильно же?
            summary ~ "'BE'" and summary ~ «пользователь»
            Не работает. Так тоже:
            summary ~ 'BE'


            1. Apakc
              07.05.2019 16:57

              Синтаксически, правильно. Однако, «be» запрещен к использованию самим атлассианом, как и некоторые другие ключевые слова. См. мой коммент выше


        1. maxzh83
          07.05.2019 16:45

          Выдает все по пользователю, без учета BE


          1. Apakc
            07.05.2019 16:52

            Как вариант, использовать упомянутый ниже скриптраннер.
            С запросом
            project = X and issueFunction in issueFieldMatch("project = X", "summary", "BE:") and summary ~ "пользователь"
            все завелось.


            1. maxzh83
              07.05.2019 17:02

              Спасибо, я помню крутил похожий вариант в поисках решения, но, видно, не дожал. Но повседневно такой красотой пользоваться не буду все же, просто не вспомню второй раз.


              1. Apakc
                07.05.2019 17:05

                Можно прикопать же фильтр :)


  1. Apakc
    07.05.2019 15:30

    Очень не хватает раскрытия темы про issueFunction.


    1. aayatsenko Автор
      07.05.2019 15:42

      Добрый день.
      issueFunction — идет в комплекте со Script Runner.
      Есть идея позднее описать возможности Script Runner в рамках JQL.
      Сейчас активно собираю весь материал :-)


      1. Apakc
        07.05.2019 15:45

        Оу, спасибо за эту деталь — не знал, думал «из коробки» идет.
        В любом случае, если эта статья про продвинутый поиск, то issueFunction уже профессиональный. Немало времени ушло на его раскуривание. Оформить его в статью было бы дюже полезно.


        1. aayatsenko Автор
          07.05.2019 16:15

          Тогда есть тема для следующего поста :)