تحديد المساهمين البارزين الناشئين

كانت محاولتنا الأولى في هذا هي لوحة المتصدرين، ولكن يبدو أنها تعطي وزناً للحجم الخالص (فكر في “هل تم إصلاحه بعد؟ هل تم إصلاحه بعد؟ هل تم إصلاحه بعد؟ مرحباً؟”) مقابل الجودة. حسناً، نعم “الجودة” صعبة الخوارزمية، على الرغم من وجود بعض التعديلات الواضحة التي يجب إجراؤها.

ما بدأنا في فعله لتحديد المستخدمين المفيدين حقاً هو

البحث عن مواضيع حيث يكون مستخدم آخر هو أول من يجيب
-- الهدف: العثور على مواضيع حيث يكون أول رد غير منشئ الموضوع هو رد غير SonarSourcer

WITH

SonarSourcers AS (
    SELECT u.id AS user_id
    FROM groups g
    INNER JOIN group_users gu ON g.id=gu.group_id
    INNER JOIN users u ON u.id = gu.user_id
    WHERE g.name='sonarsourcers'
),

tagged_topics AS (
    SELECT tt.topic_id
    FROM topic_tags tt
    JOIN tags t on t.id=tt.tag_id
    WHERE name = 'me-too'
)


-- العثور على مواضيع "عادية" أنشأها مستخدمون عاديون
topic_user AS (
    SELECT id as topic_id, user_id, created_at
    FROM topics
    LEFT JOIN SonarSourcers ss USING(user_id)
    LEFT JOIN tagged_topics tt on topics.id = tt.topic_id
    WHERE ss.user_id IS NULL  -- استبعاد المواضيع التي بدأها SonarSourcers
        AND tt.topic_id IS NULL -- استبعاد المواضيع التي تم تمييزها بـ me-too
        AND user_id > 0  -- استبعاد رسائل الترحيب/البرامج التعليمية الخاصة بـ DiscoBot
        AND visible = TRUE
        AND archived = FALSE
        AND archetype='regular'
        AND created_at::DATE > '2023-07-01'
),

-- العثور على أول رد غير منشئ الموضوع لمواضيع المستخدمين
min_response AS (
    SELECT p.topic_id, tu.created_at, MIN(post_number) as post_number
    FROM posts p
    JOIN topic_user tu USING(topic_id)
    WHERE p.post_type = 1
        AND p.user_id != tu.user_id
        AND p.post_number > 1
        AND p.hidden = false
        AND p.deleted_at IS NULL
    GROUP BY topic_id, tu.created_at
)

SELECT p.topic_id, p.user_id, mr.created_at::DATE as thread_date
FROM posts p
JOIN min_response mr ON p.topic_id = mr.topic_id AND p.post_number=mr.post_number
LEFT JOIN SonarSourcers ss ON p.user_id=ss.user_id
LEFT JOIN user_badges ub on p.id = ub.post_id and ub.badge_id=110
WHERE ss.user_id IS NULL -- استبعاد المواضيع حيث يكون SonarSourcer هو أول من يرد
    AND ub.user_id IS NULL -- استبعاد المواضيع التي تم منحها شارة بالفعل
ORDER BY mr.created_at DESC

بمجرد تحديد تلك المواضيع، نقوم بتقييم رد المستخدم ومن ثم نمنح المستخدم المستجيب شارة “مستخدمون يساعدون المستخدمين” أو نميز الموضوع بعلامة “me-too” (غير مرئية لغير الموظفين). (بالمناسبة، هذا التقرير عن استجابة المستخدم له تأثير جانبي سعيد وهو اكتشاف الحوادث في خدمتنا السحابية بسرعة. :joy:)

من هناك يصبح من السهل مكافأة المستخدمين المفيدين بشكل أكبر، وتحديدهم لمزيد من الرعاية.

5 إعجابات