كانت محاولتنا الأولى في هذا هي لوحة المتصدرين، ولكن يبدو أنها تعطي وزناً للحجم الخالص (فكر في “هل تم إصلاحه بعد؟ هل تم إصلاحه بعد؟ هل تم إصلاحه بعد؟ مرحباً؟”) مقابل الجودة. حسناً، نعم “الجودة” صعبة الخوارزمية، على الرغم من وجود بعض التعديلات الواضحة التي يجب إجراؤها.
ما بدأنا في فعله لتحديد المستخدمين المفيدين حقاً هو
البحث عن مواضيع حيث يكون مستخدم آخر هو أول من يجيب
-- الهدف: العثور على مواضيع حيث يكون أول رد غير منشئ الموضوع هو رد غير 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” (غير مرئية لغير الموظفين). (بالمناسبة، هذا التقرير عن استجابة المستخدم له تأثير جانبي سعيد وهو اكتشاف الحوادث في خدمتنا السحابية بسرعة.
)
من هناك يصبح من السهل مكافأة المستخدمين المفيدين بشكل أكبر، وتحديدهم لمزيد من الرعاية.