Множество повторяющихся записей в сводных письмах

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

  • последний визит: 2024-09-12
  • частота дайджеста: ежедневно
  • «Включать контент от новых пользователей в сводные письма»: отмечено
  • нет скрытых релевантных тегов

Популярные темы:

«ИИ — чем больше, тем лучше?» — повторено 3 раза. Тема содержит 3 тега, 0 ответов, 0 лайков.
«Задачи по социальной инженерии» — повторено 2 раза. Тема содержит 2 тега, 1 ответ, 0 лайков.

Новое для вас:

«Новые запросы тегов» — не повторялось. Тема содержит 0 тегов, 0 ответов, 0 лайков.

1 лайк

В последнем дайджесте, который получил один из моих аккаунтов, темы не дублировались, но комментарии под ними (раздел «Популярные посты») повторялись. Было пять слотов, из которых два были дубликатами (три уникальных поста), и оба дубликата относились к одной и той же теме.

Редакция: Я просматриваю некоторые исторические дайджесты, отправленные разным тестовым/администраторским аккаунтам:

  • В предыдущем также было два дубликата в разделе «Популярные посты», и они тоже касались той же темы.
  • В дайджесте перед ним был дубликат темы, но не было дубликатов в разделе «Популярные посты». Однако дубликат присутствовал в разделе «Новое для вас».
  • В дайджесте перед ним дубликатов не было.
1 лайк

@j127, было бы интересно узнать, сколько тегов было у ваших тем в дайджесте. В моих недавних выборках дублирование соответствует количеству тегов у темы. Возможно, это совпадение, а может, и нет.

3 лайка

Мне удалось воспроизвести проблему на локальном сайте Discourse, добавив тег в настройку сайта digest suppress tags, а затем создав тему с несколькими тегами.

Следующий код вызывает проблему: discourse/app/models/topic.rb at main · discourse/discourse · GitHub

    if SiteSetting.digest_suppress_tags.present?
      tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
      if tag_ids.present?
        topics =
          topics.joins("LEFT JOIN topic_tags tg ON topics.id = tg.topic_id").where(
            "tg.tag_id NOT IN (?) OR tg.tag_id IS NULL",
            tag_ids,
          )
      end
    end

Редактирование: Мне кажется, что LEFT JOIN здесь не нужен. Столбцы из присоединённой таблицы topic_tags, похоже, не используются дальше в методе. Исправление может быть таким простым:

if SiteSetting.digest_suppress_tags.present?
tag_ids = Tag.where_name(SiteSetting.digest_suppress_tags.split("|")).pluck(:id)
  if tag_ids.present?
  topics =
    topics.where.not(id: TopicTag.where(tag_id: tag_ids).select(:topic_id))
  end
end

Я оставлю команде Discourse решение о выборе наилучшего подхода. Метод for_digest выполняется очень часто и должен быть эффективным.

4 лайка

Да, у всех дублирующихся постов было по два тега.

2 лайка

@simon — огромное спасибо за то, что разобрались в этом! :smiley: Уверен, что было много информации для анализа. С нетерпением жду, когда команда Discourse вернётся и примет меры по вашему анализу.

1 лайк

Подтверждаю, что удаление тега в digest suppress tags вернуло сводки в норму. (Временно я полагаюсь на digest suppress categories.)

4 лайка

@simon был прав :+1: Это действительно была ошибка

7 лайков

Отличные новости! :smiley:

Я не совсем понимаю, когда объединённые коммиты появятся в бета-канале. Если я нахожусь на версии 3.4.0.beta3-dev (53f9c81790) и обновление GUI не предлагается, загрузит ли обновление через командную строку это изменение?

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

2 лайка

Эта тема была автоматически закрыта через 3 дня. Новые ответы больше не допускаются.