حساب المواضيع "الأعلى" في Discourse

:bookmark: هذا دليل مرجعي يشرح كيفية تحديد المواضيع التي تم تصفيتها حسب “الأعلى” لتكون “أعلى المواضيع” في Discourse.

:person_raising_hand: مستوى المستخدم المطلوب: جميع المستخدمين

تحتوي مواقع Discourse على ميزة تسمح للمستخدمين بفرز المواضيع حسب “الأعلى”. يشرح هذا الدليل كيفية حساب هذه المواضيع “الأعلى” وعرضها.

ملخص

  • يتم تعيين “درجة عليا” لجميع المواضيع “العليا”.
  • تعتمد الدرجة على الإعجابات والردود والمشاهدات خلال فترة زمنية محددة.
  • تظهر المواضيع ذات “الدرجة العليا” الأعلى في أعلى القائمة.

حساب الدرجة العليا

يتم حساب “الدرجة العليا” للموضوع باستخدام العوامل التالية:

  1. عدد المشاهدات
  2. الإعجابات على المنشور الأول
  3. الإعجابات على المنشورات اللاحقة
  4. عدد الردود

يستخدم الحساب ثلاثة إعدادات للموقع كعوامل مضاعفة:

خطوات الحساب

احسب درجة عليا لكل موضوع عن طريق إضافة ما يلي:

  1. عدد المشاهدات لكل موضوع في الفترة المحددة مضروبًا في log views multiplier.
  2. عدد الإعجابات على المنشور الأصلي للموضوع مضروبًا في first post likes multiplier.
  3. الأقل من:
    • متوسط الإعجابات لكل منشور (إجمالي الإعجابات على الموضوع مقسومًا على عدد المنشورات).
    • قيمة least likes per post multiplier.
  4. إذا كانت الفترة تحتوي على أقل من 10 منشورات، قم بإجراء الحساب التالي:
    0 - ((10 - عدد المنشورات في الموضوع) / 20) * عدد الإعجابات على المنشور الأصلي
    
    بخلاف ذلك، -10.
  5. عدد المنشورات في الموضوع.

عرض أعلى المواضيع

يمكنك رؤية مثال لأعلى المواضيع على موقع Discourse في الصورة أدناه:

موارد إضافية

لمزيد من التفاصيل الفنية، يمكنك الرجوع إلى:

-- [params]
-- date :start_date = 26 apr 2020
-- date :end_date = 2 may 2020
-- double :log_views_multiplier = 2.0
-- double :first_post_likes_multiplier = 0.5
-- double :least_likes_per_post_multiplier = 3.0

WITH likes AS (
SELECT topic_id, SUM(like_count) AS count
FROM posts
WHERE created_at::date >= :start_date::date
  AND created_at::date < :end_date::date
  AND deleted_at IS NULL
  AND NOT hidden
  AND post_type = 1
GROUP BY topic_id
),
op_likes AS (
SELECT topic_id, like_count AS count
FROM posts
WHERE created_at::date >= :start_date::date
  AND created_at::date < :end_date::date
  AND post_number = 1
  AND deleted_at IS NULL
  AND NOT hidden
  AND post_type = 1
),
posts AS (
SELECT topic_id, GREATEST(COUNT(*), 1) AS count
FROM posts
WHERE created_at::date >= :start_date::date
  AND created_at::date < :end_date::date
  AND deleted_at IS NULL
  AND NOT hidden
  AND post_type = 1
  AND user_id <> 0
GROUP BY topic_id
),
views AS (
SELECT topic_id, COUNT(*) AS count
FROM topic_views
WHERE viewed_at::date >= :start_date::date
  AND viewed_at::date < :end_date::date
GROUP BY topic_id
),
category_definition_topic_ids AS (
  SELECT COALESCE(topic_id, 0) AS id FROM categories
),
top_topics AS(
SELECT
topics.id AS topic_id,
topics.title,
topics.user_id,
posts.count AS date_range_posts,
views.count AS date_range_views,
topics.views AS all_time_views,
topics.bumped_at,
(CASE
 WHEN topics.created_at::date < :start_date::date
  AND topics.created_at::date >= :end_date::date
 THEN 0
 ELSE log(GREATEST(views.count, 1)) * :log_views_multiplier +
    op_likes.count * :first_post_likes_multiplier +
    CASE WHEN likes.count > 0 AND posts.count > 0
       THEN
        LEAST(likes.count / posts.count, :least_likes_per_post_multiplier)
       ELSE 0
    END +
    CASE WHEN topics.posts_count < 10 THEN
       0 - ((10 - topics.posts_count) / 20) * op_likes.count
    ELSE
       10
    END +
    log(GREATEST(posts.count, 1))
 END) AS score
FROM posts
INNER JOIN views ON posts.topic_id = views.topic_id
INNER JOIN likes ON posts.topic_id = likes.topic_id
INNER JOIN op_likes ON posts.topic_id = op_likes.topic_id
LEFT JOIN topics ON topics.id = posts.topic_id AND topics.deleted_at IS NULL
WHERE topics.deleted_at IS NULL
  AND topics.visible
  AND topics.archetype <> 'private_message'
  AND NOT topics.archived
  AND topics.id NOT IN (SELECT id FROM category_definition_topic_ids)
ORDER BY
  score DESC,
  topics.bumped_at DESC
)

SELECT * FROM top_topics WHERE score > 0
12 إعجابًا

هل من الممكن تضمين ‘الأصوات’ في هذا الحساب؟

تم إخفاء هذه الآن حتى لا تراها في إعدادات الموقع