实验主题列表过滤功能

我们最近推出了一种创新的 /filter 路由,可以更精细地过滤主题列表。重要的是,这是实现搜索和过滤统一主题过滤语言的第一步。此外,专门用于主题列表过滤的路由增强了侧边栏的可定制性,因为用户现在可以将链接作为 自定义部分链接 添加到侧边栏中。

如何启用

在管理员界面中启用 experimental_topics_filter 站点设置。

工作原理

/filter 包含一个输入字段,用户可以在其中输入查询字符串来过滤主题列表。

例如,category:documentation tag:how-to+email 将过滤出 Documentation 类别中同时带有 how-toemail 标签的主题。

目前支持的过滤器列表如下:

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

我错过了什么……?
它似乎没有返回标记了 chatpri-highBug 类别中的主题。

2 个赞

我不认为你应该能看到优先级标签。它们只供我们使用。:shushing_face: :slight_smile:

如果不包含它,它能正常工作吗?

3 个赞


看起来如果我移除这个标签,它也无法工作


更新:这个“别名”工作得很完美。

2 个赞

抱歉,我刚意识到我添加 tag: 别名支持的 PR 未被合并。

现在它已被合并,因此 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 的精彩工作值得称赞。这开启了多种可能性。

只是好奇它是否能提供上下文过滤选项?

例如,如果我从侧边栏选择“公告”类别,我们能否在顶部显示过滤面板(您创建的新面板)以按类别内的多个标签(聊天、新功能)进行过滤。

目前,作为最终用户,无法直观地按多个标签进行过滤 - 手动使用 /tags/interesection/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 的东西构建一个过滤器,结果会因用户而异,那将是很好的。 用例:一个给我们的版主发送链接的机器人,他们可以点击这些链接来查看他们被分配到的主题。这样我们就可以发送一条通用的消息给所有版主,其中包含他们需要参考的所有查询的链接,以便在版主管理论坛时使用。显然,他们可以从 Web UI 轻松导航到被分配到的主题,但我认为如果他们可以点击链接或书签,这将是一个小小的生活质量改进。

4 个赞

当前功能中已经有一些类似的先例,所以我认为我们可以肯定地考虑其他类似的东西:

3 个赞

您好,

有人能告诉我这是公开版本还是某个测试版本吗?我没找到相关设置。

嗨 Tony :wave:

你的实例是最新的吗?

我在我的测试论坛上设置了:

它也适用于 Discourse 托管论坛,不仅仅是自托管。

如所述,“实验性”意味着可能会/将会随着时间的推移发生许多变化,并且可能会出现错误或不一致。

1 个赞

我发现这对于向刚接触该平台的新社区经理解释 Discourse 的基本功能非常有帮助。那就是:我们有一系列主题,并且可以以多种方式对其进行过滤和排序。

到目前为止,这些过滤器分布在界面各处,但过滤器路由提供了一个中心位置来访问和了解可用选项:

考虑到这一点,我认为包含另外两个选项会很有帮助:

  • 在“日期”部分,还可以按相对时间(上周、上个月、上一年等)进行过滤
  • 在“排序”部分,还可以按受欢迎程度进行排序(这与点赞数不同)
5 个赞

我喜欢这个功能。但我希望能够只搜索纯文本。有时我需要查找一个已删除的主题,但不知道是哪个用户创建的,所以我需要浏览很多主题才能找到它,而不是仅仅能够通过关键字搜索已删除的主题。

我想我们的目标是在未来某个时候将其与搜索功能对接以实现同等功能,不过恐怕目前还没有明确的时间表。

3 个赞

您可以按回复数或投票数对结果进行排序/排列吗?我希望使用此功能按社区兴趣对功能请求进行排序,同时过滤掉标记为“已实现”的请求。但是,这似乎不是一个选项。

我的用例在此处有更详细的描述:here

2 个赞