在 Discourse 中筛选主题列表

:bookmark: 本指南将介绍 Discourse 的高级主题过滤系统,包括完整的查询语言语法、过滤选项以及如何有效使用 /filter 路由。

:person_raising_hand: 所需用户级别:所有用户

使用 Discourse 主题过滤器查询语言

Discourse 的主题过滤器提供了一种强大的查询语言,用于根据多个条件查找主题。这种高级搜索界面允许您组合过滤器、对结果进行排序以及为论坛上的任何内容创建精确的查询。

访问过滤器

您可以通过两种方式访问主题过滤器:

直接 URL 访问:
导航到 Discourse 实例上的 /filter(例如:https://meta.discourse.org/filter

侧边栏导航:
点击侧边栏中的“更多”,然后选择过滤器选项

过滤器界面包含一个智能自动完成系统,可在您键入时建议可用的过滤器和值。

基本查询语法

过滤器使用结构化语法,格式为:

filter-name:value

组合多个过滤器:

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 # 主题在 documentation 的 admins 子类别中

高级前缀:

  • = - 类别不含子类别:=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: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     # 特定日期 (YYYY-MM-DD)
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         # @ 前缀是可选的

个人过滤器(仅限已认证用户)

in:

按您与主题的个人关系过滤

可用选项:

  • in:pinned - 为您固定的主题
  • in:bookmarked - 您已加书签的主题
  • in:watching - 您正在关注的主题
  • in:tracking - 您正在跟踪的主题
  • in:muted - 您已静默的主题
  • in:normal - 通知级别正常的主题
  • in:watching_first_post - 只关注第一帖的主题

示例:

in:bookmarked category:support
in:watching,tracking         # 您正在关注或跟踪的主题

数字过滤器

点赞过滤器

  • 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

排序选项

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 - 按标题字母顺序
  • order:title-asc - 按标题反向字母顺序
  • order:views - 浏览量最多
  • order:views-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

排除已解决的 bug 报告:

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. 类别自动完成 - 按名称或 slug 建议类别
  3. 标签自动完成 - 建议带帖子数的标签
  4. 用户名自动完成 - 建议带显示名称的用户名
  5. 日期建议 - 提供快速日期选项(昨天、上周等)
  6. 前缀支持 - 显示类别和标签的前缀选项

提示和最佳实践

  1. 使用自动完成 - 过滤器界面会在您键入时提供智能建议
  2. 组合过滤器 - 混合使用不同类型的过滤器以获得精确结果
  3. 共享过滤器 URL - 过滤器 URL 可共享 - 复制 URL 以共享您的搜索
  4. 将有用的过滤器添加到侧边栏 - 过滤器 URL 可以添加到侧边栏以便轻松访问
  5. 使用排除 - 使用 - 前缀排除不需要的结果
  6. 日期快捷方式 - 使用数字表示相对日期(30 = 30 天前)
  7. 键盘导航 - 使用箭头键导航建议,使用 Tab/Enter 选择

创建自定义侧边栏链接

您可以将过滤器链接作为自定义链接添加到侧边栏:

  1. 转到您的侧边栏设置
  2. 添加一个自定义链接,其过滤器 URL 类似于 /filter?q=category:support status:open
  3. 为其指定一个描述性名称,例如“Open Support Topics”

技术说明

  • 过滤器将全文搜索与过滤器结合用于关键字搜索
  • 关键字搜索有最小搜索词长度限制
  • 结果具有权限感知性 - 您只能看到您可以访问的主题
  • 过滤器查询在服务器端处理以提高性能
  • 该功能支持插件扩展以实现自定义过滤器

附加资源

11 个赞

3 个帖子被拆分为一个新主题:为主题过滤器构建 onebox 支持

这可能吗?我知道你可以在一个分类中仅关注首帖,但这在主题中是如何实现的?

3 个赞

可能需要澄清,我认为它会首先在您关注的类别中找到所有主题的帖子,然后进行更新。

2 个赞

是否可以将其与经典的未读/新建过滤器结合使用?

2 个赞

我认为有一个hacky url,但我可以在明天添加对status:unread-posts和topics的支持,这并不难。

3 个赞

我认为我更喜欢 in:,因为它是一个像书签或跟踪一样的个人过滤器。状态的那些指的是主题状态。

我期望 watching 返回我正在关注的所有主题,而不是我正在关注的类别中的所有主题。这是一个错误的假设吗?如果关注第一个帖子指的是类别,而其他状态指的是主题,我觉得这很令人困惑。

2 个赞

我们可能需要另一个操作符来处理这种监视语义

同意,我可能需要修改内部设置以支持多个 in 子句

我希望能有一种方法,可以按我尚未查看过的主题以及我尚未回复过的主题进行筛选!

这可能吗?

例如,一个筛选器,用于“我在“介绍”类别中尚未回复过的帖子”。

2 个赞

帖子:

in:unseen category:welcome -user:shauny

或者,即使您不关心未读内容,也可以使用:

category:welcome -user:shauny

是否有类似搜索中的 in:first 的支持?谢谢。

您会如何看待它的运作方式?

例如,显示带有特定关键字的所有主题以隐藏它们(而不是使用搜索)。

This already works:

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

And so does:

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

But I guess if there is some other keyword like in:first hiding that is not handled by filter we can pipe it over to search…

1 个赞

啊,我明白了——f 会在第一篇帖子中搜索它。在文档中找不到,我不得不去 这里 查看。谢谢!

1 个赞

我缺少一个过滤器,即“未设置主题计时器关闭”或“最后一个回复后未设置主题计时器关闭”。它是否存在而我没找到?

我正在使用一个从侧边栏链接过来的过滤器来分类元(meta)上的支持主题,因为它们开始变得陈旧但未得到解决。

这是过滤器,它现在的样子是:

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

它运行得相当好,但正如你将看到的,列表中有一些主题是我设置了主题计时器,但希望不再出现在列表中的。