[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jira-chto-takoe-jql-jira-query-language":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},917,"chto-takoe-jql-jira-query-language",27,"jira","Jira","📋","Что такое JQL (Jira Query Language)?","JQL (Jira Query Language) — структурированный язык запросов для поиска задач в Jira, используемый в UI (фильтры, дашборды), REST API (эндпоинт `\u002Fsearch`), плагинах и автоматизации.\n\n> **Аналогия из жизни:** JQL — это как поисковая строка Google, но для задач Jira. Вместо свободного текста вы пишете структурированные условия: какой проект, какой статус, кто исполнитель — и получаете точный результат.\n\n### Базовый синтаксис\n\n```\nfield operator value [AND|OR] field operator value ORDER BY field [ASC|DESC]\n```\n\n### Операторы\n\n| Оператор | Описание | Пример |\n|---|---|---|\n| `=` | Равно | `project = \"PROJ\"` |\n| `!=` | Не равно | `status != Done` |\n| `>`, `\u003C`, `>=`, `\u003C=` | Сравнение | `created >= -7d` |\n| `~` | Содержит (текстовый поиск) | `summary ~ \"критическая ошибка\"` |\n| `!~` | Не содержит | `description !~ \"test\"` |\n| `IN` | Одно из значений | `status IN (Open, \"In Progress\")` |\n| `NOT IN` | Не одно из значений | `priority NOT IN (Low, Lowest)` |\n| `IS EMPTY` | Пусто | `assignee IS EMPTY` |\n| `IS NOT EMPTY` | Не пусто | `fixVersion IS NOT EMPTY` |\n| `WAS` | Было (история) | `status WAS \"In Progress\"` |\n| `CHANGED` | Изменилось | `assignee CHANGED` |\n\n### Встроенные функции\n\n```\n-- Текущий пользователь\nassignee = currentUser()\n\n-- Дата: начало\u002Fконец дня, недели, месяца\ncreated >= startOfDay()\ncreated >= startOfWeek(-1)\nduedate \u003C= endOfMonth()\n\n-- Члены группы\nassignee IN membersOf(\"developers\")\n\n-- Связанные задачи\nissue IN linkedIssues(\"PROJ-123\")\n\n-- Подзадачи\nissue IN subtasksOf(\"PROJ-100\")\n\n-- Задачи из эпика\n\"Epic Link\" = \"PROJ-50\"\n\n-- Текстовый поиск по всем полям\ntext ~ \"deploy*\"\n```\n\n### Custom Fields в JQL\n\n```\n-- По имени (с кавычками)\n\"Story Points\" > 5\n\n-- По ID (надёжнее)\ncf[10100] > 5\n```\n\n### Сложные запросы\n\n```\nproject = PROJ\n    AND status IN (\"In Progress\", \"Code Review\")\n    AND assignee IN membersOf(\"backend-team\")\n    AND created >= startOfWeek()\n    AND priority IN (Critical, Blocker)\n    AND \"Story Points\" \u003C= 8\nORDER BY priority DESC, created ASC\n```\n\n### Использование JQL в Java\n\n\u003Cdetails>\n\u003Csummary>Пример через REST API и в плагине Jira DC\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Через REST API\npublic List\u003CIssue> findCriticalBugs(String projectKey) {\n    String jql = \"project = %s AND type = Bug AND priority = Critical AND status != Done\"\n            .formatted(projectKey);\n\n    String body = \"\"\"\n            {\n                \"jql\": \"%s\",\n                \"maxResults\": 50,\n                \"fields\": [\"summary\", \"status\", \"assignee\", \"priority\"]\n            }\n            \"\"\".formatted(jql);\n\n    return restClient.post()\n            .uri(\"\u002Fsearch\")\n            .body(body)\n            .retrieve()\n            .body(SearchResult.class)\n            .getIssues();\n}\n\n\u002F\u002F В плагине Jira DC через SearchService\n@Named\npublic class IssueSearchHelper {\n\n    private final SearchService searchService;\n    private final JqlQueryParser jqlQueryParser;\n\n    @Inject\n    public IssueSearchHelper(@ComponentImport SearchService searchService,\n                             @ComponentImport JqlQueryParser jqlQueryParser) {\n        this.searchService = searchService;\n        this.jqlQueryParser = jqlQueryParser;\n    }\n\n    public SearchResults search(ApplicationUser user, String jqlString)\n            throws SearchException, ParseException {\n        Query query = jqlQueryParser.parseQuery(jqlString);\n        return searchService.search(user, query, PagerFilter.getUnlimitedFilter());\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Производительность JQL\n\n- Индексируемые поля (status, project, priority) работают быстро\n- Текстовый поиск (`~`) использует Lucene, может быть медленным на больших инстансах\n- `WAS` и `CHANGED` операторы сканируют историю — дорогие операции\n- Сложные `OR` с подзапросами замедляют выполнение\n- Для DC: кастомные поля без индексации значительно замедляют поиск\n\n### Частые ошибки\n\n- Использование `=` вместо `~` для текстового поиска: `summary = \"error\"` ищет точное совпадение\n- Забыть кавычки для значений с пробелами: `status = In Progress` — ошибка, нужно `\"In Progress\"`\n- Неэффективные запросы с `WAS`\u002F`CHANGED` на инстансах с большой историей\n- Использование `ORDER BY` с неиндексированными кастомными полями\n\n### Как используется в 2026\n\n- JQL остаётся основным языком запросов в Jira DC и Cloud\n- В Cloud добавлены новые функции: `issuesWithRemoteLinksByGlobalId()`, улучшенный полнотекстовый поиск\n- Atlassian экспериментирует с AI-ассистентом для генерации JQL из естественного языка\n- JQL используется в Jira Automation rules для определения scope правил\n\n> **На собеседовании:** знание JQL ожидается от любого Jira-разработчика. Покажите владение основными операторами, функциями (`currentUser()`, `membersOf()`, `startOfWeek()`) и умение составлять сложные запросы. Отметьте, что `cf[id]` надёжнее имени поля и что `~` поддерживает Lucene-синтаксис.","","junior",[15,16,7,17],"основы","jql","sql",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"Что такое JQL (Jira Query Language) — Gymterview","JQL: операторы, функции (currentUser, membersOf, startOfWeek), custom fields, производительность. Примеры сложных запросов и использования в Java.","JQL (Jira Query Language): операторы, функции, примеры — Gymterview","Полное руководство по JQL: синтаксис, операторы, встроенные функции, custom fields, оптимизация производительности запросов.",[26,27,28,29,30,31,32,33],"JQL","Jira Query Language","JQL операторы","JQL функции","currentUser","membersOf","поиск задач Jira","Java","JQL — структурированный язык запросов для поиска задач в Jira. Синтаксис: field operator value [AND|OR]. Операторы: =, !=, ~, IN, WAS, CHANGED. Функции: currentUser(), membersOf(), startOfWeek(). Custom fields по ID (cf[10100]) надёжнее, чем по имени. WAS\u002FCHANGED — дорогие операции, сканируют историю.",true]