كيف يمكنك إضافة الأوزان معًا في فهرس نص أوراكل؟

StackOverflow https://stackoverflow.com/questions/233564

سؤال

لقد قمت بإنشاء مخزن بيانات متعدد الأعمدة على جدول يسمح لي بفهرسة النص الكامل على الجدول.ما أحتاج إلى أن أكون قادرًا على فعله هو وزن كل عمود بشكل مختلف وإضافة الدرجات معًا.

الاستعلام التالي يعمل، ولكنه بطيء:

SELECT document.*, Score(1) + 2*Score(2) as Score
FROM document
WHERE (CONTAINS(documentContent, 'the_keyword', 1) > 0
OR CONTAINS(documentTitle, 'the_keyword', 2) > 0 )
ORDER BY Score DESC

بعد قليل من البحث في Google، اقترح الناس الحل على النحو التالي:

SELECT document.*, Score(1) as Score
FROM document
WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))*2 OR ((the_keyword) within documentText)',1) > 0)
ORDER BY Score Desc

الاستعلام أعلاه أسرع من سابقه ولكنه لا يحل المشكلة الفعلية.في هذه الحالة، إذا تم العثور على الكلمة الأساسية في documentTitle، فلن تبحث في documentText (فهي تستخدم عامل التشغيل OR).ما أحتاجه حقًا هو إضافة النتيجتين معًا بحيث إذا ظهرت الكلمة الرئيسية في العنوان والنص، فستحصل على درجة أعلى مما لو ظهرت في العنوان فقط.

إذًا، كيف يمكنك إضافة درجات الأعمدة المرجحة في عبارة CONTAINS واحدة؟

هل كانت مفيدة؟

المحلول

بدلاً من عامل التشغيل OR، استخدم ACCUM:

حدد المستند.*، النتيجة (1) كنتيجة من المستند حيث تحتوي على (Dummy ، '(((the_keyword) داخل documentTitle))*2 اككوم ((the_keyword) داخل documentText) '، 1)> 0) اطلب بنتيجة desc

نصائح أخرى

وماذا لو كنت تفعل متداخلة حدد؟

select *, Score(1) + 2 * Score(2) as Score
from (
    SELECT document.*, Score(1) as Score
    FROM document
    WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))
        OR ((the_keyword) within documentText)',1) > 0)
)
ORDER BY Score Desc
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top