Фильтрация списков тем в Discourse

:bookmark: Это руководство объясняет расширенную систему фильтрации тем Discourse, включая полный синтаксис языка запросов, варианты фильтров и эффективное использование маршрута /filter.

:person_raising_hand: Требуемый уровень доступа: Для всех пользователей

Использование языка запросов фильтрации тем Discourse

Фильтр тем Discourse предоставляет мощный язык запросов для поиска тем по множеству критериев. Этот расширенный интерфейс поиска позволяет комбинировать фильтры, сортировать результаты и создавать точные запросы для любого контента на вашем форуме.

Доступ к фильтру

Вы можете получить доступ к фильтру тем двумя способами:

Прямой доступ по URL:
Перейдите на /filter в вашем экземпляре Discourse (например: https://meta.discourse.org/filter)

Навигация через боковую панель:
Нажмите «Ещё» в вашей боковой панели, затем выберите опцию фильтра.

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

Базовый синтаксис запроса

Фильтры используют структурированный синтаксис в формате:

имя-фильтра:значение

Комбинирование нескольких фильтров:

category:support status:open created-after:2023-01-01

Включение обычных поисковых терминов:

category:support ssl certificate error

Это ищет темы в категории «support», содержащие слова «ssl certificate error».

Фильтры по категориям

category: (синоним: categories:)

Фильтрация тем по категориям

Базовое использование:

category:support
category:dev,support          # Темы в категориях dev ИЛИ support
category:documentation:admins # Темы в подкатегории admins категории documentation

Расширенные префиксы:

  • = - Категория без подкатегорий: =category:general
  • - - Исключить категорию: -category:off-topic
  • -= - Исключить категорию без подкатегорий: -=category:meta

Примеры:

category:bug,feature          # Включить категории bug или feature (с подкатегориями)
=category:bug,feature         # Включить категории bug или feature (без подкатегорий)
-category:bug,feature         # Исключить категории bug или feature (с подкатегориями)
-=category:bug,feature        # Исключить категории bug или feature (без подкатегорий)

Фильтры по тегам

tag: (синоним: tags:)

Фильтрация тем по тегам (требуется включение тегов)

Базовое использование:

tag:bug
tag:feature,enhancement       # Темы с тегами feature ИЛИ enhancement
tag:bug+urgent               # Темы с ТЕМИ И ДРУГИМИ тегами: bug И urgent

Исключение:

-tag:solved                  # Исключить темы с тегом solved
-tag:bug+urgent              # Исключить темы с обоими тегами: bug и urgent
-tag:bug,urgent              # Исключить темы с тегами bug или urgent

tag_group:

Фильтрация по группам тегов

Базовое использование:

tag_group:moderation
tag_group:"tag group name"   # Используйте кавычки для названий с пробелами или спецсимволами
-tag_group:staff-only        # Исключить темы с тегами из группы staff-only

Фильтры по датам

Все фильтры по датам поддерживают как конкретные даты (YYYY-MM-DD), так и относительные дни:

Даты активности

  • activity-before: - Темы с последней активностью до указанной даты
  • activity-after: - Темы с последней активностью после указанной даты

Даты создания

  • created-before: - Темы, созданные до указанной даты
  • created-after: - Темы, созданные после указанной даты

Даты последнего сообщения

  • latest-post-before: - Темы с последним сообщением до указанной даты
  • latest-post-after: - Темы с последним сообщением после указанной даты

Примеры формата даты:

created-after:2023-12-25     # Конкретная дата (ГГГГ-ММ-ДД)
created-after:30             # 30 дней назад
created-after:1              # Вчера
created-after:0              # Сегодня

Быстрые подсказки:

  • 1 - Вчера
  • 7 - На прошлой неделе
  • 30 - В прошлом месяце
  • 365 - В прошлом году

Фильтры по пользователям

created-by:

Фильтрация по автору темы (имя пользователя или название группы)

Базовое использование:

created-by:username
created-by:user1,user2       # Темы, созданные user1 ИЛИ user2
created-by:@username         # Префикс @ необязателен
created-by:me                
created-by:staff             # Темы, созданные участниками группы "staff"

users: (синоним: user:)

Фильтрация тем, в которых участвовали конкретные пользователи (оставляли сообщения в теме)

Базовое использование:

users:username               # Темы, где username оставлял сообщения
users:user1,user2            # Темы, где user1 ИЛИ user2 оставляли сообщения
users:user1+user2            # Темы, где И user1, И user2 оставляли сообщения

Исключение:

-users:username              # Темы, где username НЕ оставлял сообщений
-users:user1,user2           # Темы, где ни user1, ни user2 не оставляли сообщений
-users:user1+user2           # Темы, где хотя бы один из user1 или user2 НЕ оставлял сообщений

group: (синоним: groups:)

Фильтрация тем, в которых участвовали участники конкретных групп

Базовое использование:

group:staff                  # Темы, где участвовал участник группы staff
group:staff,moderators       # Темы, где участвовал участник группы staff ИЛИ moderators
group:staff+moderators       # Темы, где участвовали участники И группы staff, И группы moderators

Персональные фильтры (только для авторизованных пользователей)

in:

Фильтрация по вашему личному отношению к темам

Доступные опции:

  • in:pinned - Темы, закрепленные для вас
  • in:bookmarked - Темы, которые вы закрепили (закладки)
  • in:watching - Темы, за которыми вы следите
  • in:tracking - Темы, которые вы отслеживаете
  • in:muted - Темы, которые вы отключили (mute)
  • in:normal - Темы с уровнем уведомлений «по умолчанию»
  • in:watching_first_post - Темы в категориях или с тегами, где вы следите за первым сообщением
  • in:new - Темы с новой активностью (новые темы, которые вы не видели + непрочитанные ответы)
  • in:new-topics - Новые темы, которые вы еще не видели
  • in:new-replies - Темы с непрочитанными ответами
  • in:unseen - Темы, которые вы еще не просматривали

Примеры:

in:bookmarked category:support
in:watching,tracking         # Темы, за которыми вы следите ИЛИ которые отслеживаете
in:unseen category:welcome   # Не просмотренные темы в категории welcome
in:new order:created         # Вся новая активность, отсортированная по дате создания

Числовые фильтры

Фильтры по лайкам

  • likes-min: - Минимальное общее количество лайков во всех сообщениях
  • likes-max: - Максимальное общее количество лайков во всех сообщениях
  • likes-op-min: - Минимальное количество лайков в первом сообщении темы
  • likes-op-max: - Максимальное количество лайков в первом сообщении темы

Фильтры по количеству сообщений

  • posts-min: - Минимальное количество сообщений
  • posts-max: - Максимальное количество сообщений

Фильтры по участникам

  • posters-min: - Минимальное количество участников
  • posters-max: - Максимальное количество участников

Фильтры по просмотрам

  • views-min: - Минимальное количество просмотров
  • views-max: - Максимальное количество просмотров

Примеры:

likes-min:10                 # Темы с как минимум 10 лайками
posts-min:5 posts-max:20     # Темы с 5–20 сообщениями
views-min:100 likes-op-min:5 # Популярные темы с активным первым сообщением

Фильтры по статусу

status:

Фильтрация по статусу темы

Доступные статусы:

  • status:open - Открытые темы (не закрытые и не архивные)
  • status:closed - Закрытые темы
  • status:archived - Архивные темы
  • status:listed - Отображаемые (видимые) темы
  • status:unlisted - Скрытые темы
  • status:deleted - Удаленные темы (требуется разрешение)
  • status:public - Публичные темы (категории без ограничений)

Статусы, зависящие от плагинов:

  • status:solved - Решенные темы (с плагином Solved)
  • status:unsolved - Нерешенные темы (с плагином Solved)

Примеры:

status:open category:support
status:closed created-after:30

Фильтр по локали

locale:

Фильтрация тем по локали

Базовое использование:

locale:en                    # Темы на английском языке
locale:en,fr                 # Темы на английском ИЛИ французском языках
-locale:fr                   # Исключить темы на французском языке

Опции сортировки

order:

Сортировка результатов по различным критериям

Доступные типы сортировки:

  • order:activity - Последняя активность (по умолчанию, по убыванию)
  • order:activity-asc - Сначала самая старая активность
  • order:created - Дата создания (сначала новые)
  • order:created-asc - Сначала старые
  • order:latest-post - Дата последнего сообщения
  • order:latest-post-asc - Сначала самое старое последнее сообщение
  • order:likes - Наибольшее количество лайков во всех сообщениях
  • order:likes-asc - Наименьшее количество лайков
  • order:likes-op - Наибольшее количество лайков в первом сообщении
  • order:likes-op-asc - Наименьшее количество лайков в первом сообщении
  • order:posters - Наибольшее количество участников
  • order:posters-asc - Наименьшее количество участников
  • order:title - По алфавиту по названию (Z→A)
  • order:title-asc - По алфавиту по названию (A→Z)
  • order:views - Наибольшее количество просмотров
  • order:views-asc - Наименьшее количество просмотров
  • order:hot - Наивысший показатель «горячести» (hot score)
  • order:hot-asc - Наименьший показатель «горячести»
  • order:category - Название категории
  • order:category-asc - Обратный порядок названий категорий
  • order:read - Дата последнего прочтения (для авторизованных пользователей)
  • order:read-asc - Сначала самое старое прочтение

Продвинутые примеры

Найти популярные недавние обсуждения:

created-after:7 likes-min:10 order:likes

Темы поддержки, требующие внимания:

category:support status:open posts-max:3 created-after:7

Ваше закрепленное (закладки) обсуждение по разработке:

category:dev in:bookmarked order:activity

Исключить решенные отчеты об ошибках:

category:bug -tag:solved status:open order:created

Темы с высоким уровнем вовлеченности от конкретных пользователей:

created-by:admin,moderator likes-min:5 views-min:100

Недавние скрытые темы (только для персонала):

status:unlisted created-after:30 order:created

Функции автодополнения

Поле ввода фильтра предоставляет интеллектуальные подсказки:

  1. Предложения фильтров - Показывает доступные фильтры по мере ввода
  2. Автодополнение категорий - Предлагает категории по имени или слаг
  3. Автодополнение тегов - Предлагает теги с количеством сообщений
  4. Автодополнение имен пользователей - Предлагает имена пользователей с отображаемыми именами
  5. Предложения по датам - Предлагает быстрые варианты дат (вчера, на прошлой неделе и т.д.)
  6. Поддержка префиксов - Показывает варианты префиксов для категорий и тегов

Советы и лучшие практики

  1. Используйте автодополнение - Интерфейс фильтра предоставляет интеллектуальные подсказки по мере ввода
  2. Комбинируйте фильтры - Смешивайте разные типы фильтров для получения точных результатов
  3. Поделитесь URL-адресом фильтра - URL-адреса фильтров можно делиться — скопируйте URL, чтобы поделиться вашим поиском
  4. Добавьте полезные фильтры в боковую панель - URL-адреса фильтров можно добавить в боковую панель для быстрого доступа
  5. Используйте исключение - Используйте префикс - для исключения нежелательных результатов
  6. Ярлыки для дат - Используйте числа для относительных дат (30 = 30 дней назад)
  7. Навигация с клавиатуры - Используйте стрелки для навигации по подсказкам, Tab/Enter для выбора
  8. Цитируйте спецсимволы - Используйте кавычки для названий групп тегов с пробелами или спецсимволами

Создание пользовательских ссылок в боковой панели

Вы можете добавить ссылки на фильтры в боковую панель как пользовательские ссылки:

  1. Перейдите в настройки боковой панели
  2. Добавьте пользовательскую ссылку с URL-адресом фильтра, например /filter?q=category:support status:open
  3. Дайте ей описательное имя, например «Открытые темы поддержки»

Технические примечания

  • Фильтр использует полнотекстовый поиск для ключевых слов в сочетании с фильтрами
  • Применяется минимальная длина поискового термина для поиска по ключевым словам
  • Результаты учитывают права доступа — вы видите только те темы, к которым у вас есть доступ
  • Запросы фильтра обрабатываются на стороне сервера для повышения производительности
  • Функция поддерживает расширения плагинов для пользовательских фильтров

Дополнительные ресурсы

11 лайков

3 сообщения были перенесены в новую тему: Поддержка onebox для фильтров тем

Это возможно? Я знаю, что можно следить только за первыми сообщениями в категории, но как это работает в теме?

3 лайка

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

2 лайка

Можно ли совместить это с классическими фильтрами непрочитанных/новых сообщений?

2 лайка

Думаю, там есть не совсем корректный URL, но я могу добавить поддержку status:new-posts и topics уже завтра, это не так уж сложно.

3 лайка

Думаю, я бы предпочёл in:, так как это персональный фильтр, подобный закладкам или отслеживанию. Статусы же относятся к статусу темы.

Я ожидал, что watching вернёт все темы, которые я наблюдаю, а не все темы из категорий, которые я наблюдаю. Неужели я ошибаюсь? Меня это сбивает с толку, если «первое сообщение» относится к категории, тогда как другие статусы относятся к темам.

2 лайка

Возможно, нам понадобится ещё один оператор для этой семантики наблюдения.

Согласен по поводу in — возможно, мне придётся немного доработать внутреннюю часть, чтобы поддерживать несколько предложений in.

Мне бы очень хотелось иметь возможность фильтровать по темам, которые я ещё не просматривал, и по тем, на которые ещё не отвечал!

Это возможно?

Например, фильтр «Сообщения в категории «Знакомства», на которые я ещё не отвечал».

2 лайка

пост:

in:unseen category:welcome -user:shauny

Или даже если вас не интересуют непрочитанные, можно использовать:

category:welcome -user:shauny

Есть ли поддержка таких операторов, как in:first, как в поиске? Спасибо.

Как бы вы видели, что это работает?

Например, показ всех тем с определённым ключевым словом, чтобы скрыть их (вместо использования поиска).

Это уже работает:

https://meta.discourse.org/filter?q=glitchy%20category%3Abug

А также:

https://meta.discourse.org/filter?q=glitchy%20category%3Abug%20f

Но, возможно, если есть какое-то другое ключевое слово, например in:first, которое скрывается и не обрабатывается фильтром, мы можем перенаправить его в поиск…

1 лайк

А, понял — f ищет это в первом посте. Не смог найти это в документации, пришлось посмотреть здесь. Спасибо!

1 лайк

Отсутствующий у меня фильтр — это «нет таймера темы, установленного на закрытие» или «нет таймера темы, установленного на закрытие после последнего ответа». Существует ли такой фильтр, и я просто не могу его найти?

Я использую фильтр, ссылку на который я разместил в боковой панели, для сортировки тем поддержки здесь, на meta, когда они начинают стареть, оставаясь нерешёнными.

Вот как выглядит этот фильтр сейчас:

category:support status:open status:unsolved activity-before:7 assigned:nobody

Он работает довольно хорошо, но, как вы увидите, в списке есть темы, для которых я установил таймеры, и я бы хотел больше не видеть их в списке.

2 сообщения были перенесены в новую тему: Как отфильтровать список тем по группе тегов со специальными символами

Вы когда-нибудь добавляли это?

Мне бы очень хотелось иметь возможность фильтровать темы, в которых есть непрочитанные сообщения, наряду со всеми моими другими фильтрами. Это было бы моим основным применением этой функции.

Могу ли я использовать filter в category, чтобы оставить cat-menu/sidebar (как doc-menu) слева?

Возможно ли фильтровать темы по конкретному тексту? Я мог бы использовать поиск, но список тем имеет более удобный интерфейс.