أعتقد أن النهج الذي اقترحته في ذلك الموضوع يحتاج إلى تحسين. إحدى مشكلاته هي أن المستخدمين من مستوى TL3 فما فوق فقط هم القادرون على وضع وسوم في المنشورات على Meta. وهذا يعني أن غالبية مستخدمي الموقع لن يتمكنوا من اتباع تعليماتي. والمشكلة الأخرى هي أننا سننتهي بوجود مواضيع ذات إجابات ومواضيع بدون إجابات تحمل وسم data-explorer. وهذا لن يساعد كثيرًا في البحث عن الاستعلامات.
عذراً على التأخر في الإجابة. لقد انشغلت بسؤال حول كيفية تنظيم استعلامات مستكشف البيانات على الموقع. يبدو أن استخدام وسم data-explorer هو الحل المثالي، لكن المواضيع التي تحتوي على استعلام مستكشف البيانات ستحتاج إلى أن يوسمها مستخدم ذو حالة TL3.
أعتقد أن استعلامًا مثل التالي سيعطيك المعلومات التي تبحث عنها:
SELECT
topic_id,
category_id,
SUM(total_msecs_viewed) / 60000 AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100
يمكن تعديل عبارة LIMIT 100 في السطر الأخير من الاستعلام أو إزالتها إذا كنت تريد إرجاع نتائج أكثر.
إذا اخترت أربعة أو خمسة عشوائيًا وقارنت نتيجة عمود وقت القراءة المقدر في هذا الاستعلام بوقت القراءة المقدر في الموضوع نفسه، أحصل على رقمين مختلفين جدًا؟
يمكنك استخدام متوسط الوقت الذي يستغرقه المستخدمون لقراءة الموضوع.
في هذه الحالة، يمكنك ببساطة تغيير دالة SUM إلى AVG، وسيظهر الأمر على النحو التالي:
SELECT
topic_id,
category_id,
AVG(total_msecs_viewed) / 60000 AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100
لكن هذا يعني أن الشخص يستغرق في المتوسط 438 دقيقة لقراءة الموضوع الرئيسي؟ يبدو هذا غير مرجح. قد يبدو هذا غريبًا، لكن هل كان لديك عدد كافٍ من الأصفار في الرقم 60,000؟
تعديل: أو ربما يشمل المتوسط جميع مرات إعادة قراءة الموضوع أيضًا؟ إذن القراءة مرة واحدة تستغرق 61 دقيقة، لكن المستخدمين يقضون في الواقع في المتوسط 438 دقيقة هناك.
ومع ذلك، فأنا مهتم الآن بمعرفة كيفية حساب “وقت القراءة المقدّر” للملخص، لأنه من المثالي أن تتطابق هذه الأرقام. حتى لو قللنا تلك الأرقام بعامل عشرة، فلن نقربها إلا تقريبًا تقريبيًا.
أجد صعوبة في فك شفرة هذه الأمور، لكن يبدو أنها تستخدم معادلة تعتمد على عدد الكلمات مضروبًا في الوقت (بالإضافة إلى حد أدنى من الوقت لتغطية المنشورات التي لا تحتوي على كلمات، مثل الصور).
كان هناك أيضًا هذا الرابط الذي أعطى تلميحًا حول ما قد يُسمى القيمة النهائية: (رغم أنه قديم، لذا ربما تغير؟)
ربما لا يكون هذا مفيدًا بشكل كبير، لكنني اعتقدت أنني سأشاركه في حالة فائدته.
لقد ألقيت نظرة أخرى على هذا، ويبدو (في أبسط صوره) أنه عدد كلمات الموضوع مضروبًا في إعداد المسؤول “عدد كلمات وقت القراءة” (الافتراضي 500 كلمة/دقيقة). لذلك أعتقد أن هذا الاستعلام سينتج “أطول المواضيع للقراءة” X الأفضل:
-- [params]
-- integer :limit = 10
SELECT t.id as topic_id, (t.word_count)/500+1 AS estimated_read_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
ORDER BY t.word_count DESC
LIMIT :limit
على الرغم من وجود بديل “4 ثوانٍ كحد أدنى” أيضًا: (عدد المشاركات × 4) / 60. وهو موجود لحساب مواضيع الصور التي لا تحتوي على عدد كلمات. لذا فهو يعمل بكلتا الطريقتين، ويعرض أيهما أكبر. لكنني لم أكتشف بعد كيفية إضافة ذلك.
للأسف، ليس لدي موقع كبير بما يكفي لاختباره بشكل صحيح. بدا أنه يعمل على عينة اختبار صغيرة، ولكنه قد يحتاج إلى تعديل.
تعديل: أضفت معلمة “limit” لجعله أقرب إلى مواصفات OP.
لقد حاولت مرة أخرى. لست متأكدًا بنسبة 100% من هذا، حيث ليس لدي عينة كبيرة بما يكفي لاختبارها، لكنها التقطت مواضيع الاختبار الخاصة بي.
-- [params]
-- integer :limit = 10
WITH read_time AS (
SELECT t.id as topic_id,
(t.word_count)/500+1 as word_count_time,
(t.posts_count*4)/60+1 as post_count_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
)
SELECT topic_id, CONCAT (CASE WHEN word_count_time > post_count_time THEN word_count_time ELSE post_count_time END, ' min') AS estimated_reading_time
FROM read_time
ORDER BY estimated_reading_time DESC
LIMIT :limit