Фильтр списка тем

Мы недавно внедрили инновационный маршрут /filter, позволяющий более гибко фильтровать список тем. Важно отметить, что это первый шаг к созданию единого языка фильтрации тем для поиска и фильтрации. Кроме того, выделенный маршрут для фильтрации списка тем повышает настраиваемость боковой панели: теперь пользователи могут добавлять ссылки как пользовательские ссылки разделов в боковую панель.

Как это работает

На странице /filter есть поле ввода, куда пользователи могут ввести строку запроса для фильтрации списка тем.

Например, category:documentation tag:how-to+email отфильтрует темы, находящиеся в категории Documentation и помеченные тегами how-to и email одновременно.

В настоящее время поддерживается следующий список фильтров:

status:open — темы, которые не закрыты и не заархивированы
status:closed — закрытые темы
status:public — темы, не имеющие ограничений на чтение (например, принадлежащие защищённой категории)
status:archived — заархивированные темы
status:unlisted — невидимые темы
status:listed — видимые темы
status:deleted — удалённые темы

in:pinned — закреплённые темы (глобальные или в рамках категории)
in:watching — темы, за которыми я слежу; поддерживает значения (muted, normal, tracking, watching_first_post): позволяет отфильтровать темы, за которыми вы следите, наблюдаете и т. д. — несколько значений можно разделять запятыми
in:bookmarked — темы, которые я добавил в закладки

category:bug — темы в категории bug и во всех её подкатегориях
=category:bug — темы в категории bug, исключая подкатегории
category:documentation:admins — темы в подкатегории admins категории documentation
category:bug,feature — темы в категориях bug или feature, включая все подкатегории
=category:bug,feature — темы в категориях bug или feature, исключая все подкатегории
-category:bug,feature — исключение тем в категориях bug или feature, включая все подкатегории
-=category:bug,feature — исключение тем в категориях bug или feature, исключая все подкатегории
categories: — синоним для category

tag:bug+feature — темы с тегами bug и feature одновременно
tag:bug,feature — темы с тегами bug или feature
-tag:bug+feature — исключение тем с тегами bug и feature
-tag:bug,feature — исключение тем с тегами bug или feature
tags: — синоним для tag

tag_group:tag_group_name — темы с любыми тегами из группы tag_group
-tag_group:tag_group_name — исключение тем с любыми тегами из группы tag_group

created-by:@USERNAME — темы, созданные конкретным пользователем

posts-min:X — темы с X или более сообщениями
posts-max:X — темы с не более чем X сообщениями
posters-min:X — темы, где опубликовали сообщения как минимум X разных пользователей
posters-max:X — темы, где опубликовали сообщения не более чем X разных пользователей
likes-min:X — темы с X или более лайками
likes-max:X — темы с не более чем X лайками
likes-op-min:X — темы, у которых первое сообщение имеет X или более лайков
likes-op-max:X — темы, у которых первое сообщение имеет не более X лайков
views-min:X — темы с X или более просмотрами
views-max:X — темы с не более чем X просмотрами

activity-before:YYYY-MM-DD — темы с последним обновлением до указанной даты
activity-after:YYYY-MM-DD — темы с последним обновлением после указанной даты
created-before:YYYY-MM-DD — созданные до указанной даты
created-after:YYYY-MM-DD — созданные после указанной даты
latest-post-before:YYYY-MM-DD — темы с последним сообщением, созданным до указанной даты
latest-post-after:YYYY-MM-DD — темы с последним сообщением, созданным после указанной даты

order:activity — сортировка по дате последнего обновления (по убыванию)
order:latest-post — сортировка по дате создания последнего сообщения (по убыванию)
order:created — сортировка по дате создания темы (по убыванию)
order:views — сортировка по количеству просмотров (по убыванию)
order:likes — сортировка по количеству лайков в теме (по убыванию)
order:likes-op — сортировка по количеству лайков в первом сообщении каждой темы (по убыванию)
order:posters — сортировка по количеству участников, публиковавших сообщения (по убыванию)
order:category — сортировка по названию категории
order:ANY-asc — изменение порядка результатов на восходящий

Обратная связь

Мы хотели бы узнать у сообщества, насколько эта функция будет полезна для ваших собственных сообществ, а также как вы её используете.

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

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

33 лайка
Filter topics without a specific tag
Is there a way to export topics/posts that are displayed when filtering?
Building an Index from topics
Discourse Custom Topic Lists
How to show topics ordered by date of publishing via user interface?
How to show topics ordered by date of publishing via user interface?
How to exclude a Category from search or Search through all categories except one+
Filter to eliminate from view: broken plug-ins/theme Components
How can I filter/paginate the list CategoryTopics route?
URL syntax to filter on multiple tags within a category
Why Filter doesn't show me options like the shown on Meta?
My topics not in latest?
How to show topics ordered by date of publishing via user interface?
Wp-discourse-shortcodes plugin
Latest/Hot/Top - what about Best/Popular? Request for automatic selection
Using query strings to filter topic views
Streamline Tag Intersections
Adding Following to the /filter option
Filtering topic lists in Discourse
Filter topics with certain categories OR certain tags
Using query strings to filter topic views
How are you increasing response rate in a community support forum?
Topic filter UI isn't very intuitive
Searching for content effectively
Filtered Topic Lists
Topic list parameter for created after
Using query strings to filter topic views
Disappearing bookmarks and expected behavior of /bookmarks
How to show topic-map on non-commented posts?
View that contains topics of specific categories?
Filter posts with a specific tag on latest
Allow searching across multiple categories
Combined Watching/Tracking list
Put every closed topic at the bottom of a category
Sort display of topics Alphabetically

Что я упустил…?
Похоже, что не возвращаются темы из категории bug, помеченные одновременно тегами chat и pri-high.

2 лайка

Я не думаю, что вы должны видеть теги приоритета. Они только для нас. :shushing_face: :slight_smile:

Работает ли это, если вы его не включаете?

3 лайка


Похоже, что если я удалю этот тег, он тоже не будет работать


обновление: «псевдоним» работает отлично.

2 лайка

Извините, я только что понял, что мой PR с поддержкой алиаса tag: не был принят.

Теперь он принят, так что алиас tag: должен заработать в ближайшее время.

6 лайков

Ещё одна проблема: фильтр tags в настоящее время не поддерживает символы, не входящие в ASCII, например китайские.

Пример: tags:一个不存在的标签 возвращает все темы, тогда как tags:a-non-existent-tag не возвращает ничего, как и ожидалось.


Я проверил исходный код: проблема вызвана следующим:

    value.scan(
        /\A(?<tag_names>([a-zA-Z0-9\-]+)(?<delimiter>[,+])?([a-zA-Z0-9\-]+)?(\k<delimiter>[a-zA-Z0-9\-]+)*)\z/,
5 лайков

Отличная работа, @tgxworld! Это открывает множество возможностей.

Просто интересно: можно ли добавить опцию контекстной фильтрации?

Например, если я выбираю категорию «Объявления» в боковой панели, можно ли отображать панель фильтрации (ту новую, которую вы создали) вверху, чтобы фильтровать по нескольким тегам (chat, new-feature) в рамках этой категории.

Сейчас обычный пользователь не может интуитивно отфильтровать по нескольким тегам — вручную нам приходится использовать эндпоинт /tags/intersection/chat/new-feature. Обычные пользователи могут не знать об этой возможности, особенно при работе в рамках конкретной категории.

5 лайков

Отличное замечание. У меня есть исправление для тегов в

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

5 лайков

При появлении новой темы в /filter отсутствует строка перевода:

[en.topic_count_all count=1]

4 лайка

Функция звучит надёжно и определённо поможет создавать более качественные и кастомизированные ленты тем для наших пользователей! Спасибо!

Тем временем у меня есть вопрос: позволяет ли эта функция встраивать последние публикации из нескольких тем в рамках конкретных категорий/тегов?

1 лайк

Нет, на данный момент это не входит в наши планы, насколько я знаю.

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

1 лайк

Спасибо за эту очень полезную функцию!

Возможно ли также добавить created-by:me или что-то подобное, что автоматически фильтрует темы, созданные текущим пользователем? Это, конечно, было бы похоже на /my/activity/topics, но это могло бы быть полезно при комбинировании с другими фильтрами и добавлении в боковую панель для всех пользователей.

Также как насчет фильтра in:participated для всех тем, в которых я участвовал, независимо от настроек отслеживания или уведомлений?

5 лайков

Это отлично! :pray: Мне бы также хотелось добавить поддержку status:unsolved. Кроме того, было бы здорово иметь возможность создавать фильтры с помощью таких параметров, как assigned:me, чтобы результаты менялись в зависимости от пользователя. Сценарий использования: бот, отправляющий нашим модераторам ссылки, по которым они могут перейти к своим назначенным темам. Это было бы удобно, так как мы могли бы отправлять всем модераторам одно общее сообщение со ссылками на все запросы, которые им нужно проверять при модерации форума. Конечно, они могут легко перейти к назначенным темам через веб-интерфейс, но я считаю, что это небольшое улучшение качества жизни, если они смогут просто кликнуть по ссылке или добавить её в закладки.

4 лайка

В текущей функции уже есть прецеденты для подобных вещей, поэтому я думаю, что мы определённо можем рассмотреть и другие варианты, такие как:

3 лайка

Привет,

Подскажите, пожалуйста, это в публичной версии или какая-то бета-версия? Я не смог найти эту настройку.

Привет, Тони :wave:

Актуальна ли ваша инстанция?

У меня на тестовом форуме включена эта настройка:

Она доступна также на форумах Discourse Hosted, а не только на самохостинговых.

Как указано, это «экспериментальная» функция, что означает: со временем могут произойти (и произойдут) множество изменений, а также следует ожидать ошибок или несоответствий.

1 лайк

Я уже нахожу это очень полезным для объяснения базового функционала Discourse новым менеджерам сообществ. А именно: У нас есть набор тем, и мы можем фильтровать и сортировать их множеством способов.

До сих пор эти фильтры были разбросаны по всему интерфейсу, но маршрут фильтров предлагает одно центральное место для доступа к доступным опциям и изучения их:

С учётом этого, я счёл бы полезным добавить ещё два варианта:

  • в разделе Дата также добавить фильтрацию по относительному времени (на прошлой неделе, в прошлом месяце, в прошлом году и т. д.)
  • в разделе Сортировка также добавить сортировку по популярности (что отличается от количества лайков)
5 лайков

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

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

3 лайка

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

Мой случай использования более подробно описан здесь.

2 лайка