"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > المطابقة الغامضة مع بحث Trigram: إنشاء بحث ذكي في Node.js وMySQL

المطابقة الغامضة مع بحث Trigram: إنشاء بحث ذكي في Node.js وMySQL

تم النشر بتاريخ 2024-11-09
تصفح:629

Fuzzy Matching with Trigram Search: Building Intelligent Search in Node.js and MySQL

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

ما هو التريجرام؟
التريجرام عبارة عن سلسلة من ثلاثة أحرف متتالية من سلسلة معينة. على سبيل المثال، يمكن تقسيم كلمة "بحث" إلى الأشكال الثلاثية التالية:

  • بحر
  • أذن
  • قوس
  • آر.سي من خلال تقسيم الكلمات إلى أشكال ثلاثية، يمكننا إجراء مطابقة نصية أكثر مرونة وكفاءة، خاصة عند محاولة مطابقة المصطلحات غير الكاملة أو التي بها أخطاء إملائية طفيفة.

تنفيذ بحث Trigram في MySQL عن طريق إنشاء جدول مؤقت

1.إنشاء دالة Trigram في قاعدة بيانات MySQL. رمز وظيفة Trigram:

CREATE FUNCTION TRIGRAM_SEARCH(search_string VARCHAR(255), target_string VARCHAR(255)) 
RETURNS FLOAT
DETERMINISTIC
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE total_trigrams INT DEFAULT 0;
    DECLARE matched_trigrams INT DEFAULT 0;
    DECLARE search_length INT;
    DECLARE target_length INT;

    SET search_length = CHAR_LENGTH(search_string);
    SET target_length = CHAR_LENGTH(target_string);

    -- Handle edge cases where strings are too short
    IF search_length  0 THEN
        RETURN matched_trigrams / total_trigrams;
    ELSE
        RETURN 0;
    END IF;
END;

2. الآن فهرسة العمود المطلوب إلى نص كامل

@Entity()
@Index(['title'], { fulltext: true })
export class Ebook extends BaseEntity {
  @PrimaryGeneratedColumn()
  ebookId: number;

  @Column({ nullable: true })
  title: string;
}

3.اختبار وظيفة البحث بالتريجرام

select *
FROM ebook e 
WHERE TRIGRAM_SEARCH('physis onlu', e.title) > 0.4
ORDER BY TRIGRAM_SEARCH('physis onlu', e.title) desc;

4. تنفيذ بحث ثلاثي الأبعاد في الكود

 async find(title?: string) {
        const eBooks = await this.dataSource
      .getRepository(Ebook)
      .createQueryBuilder('eBook');
    if (title) {
      eBooks.where(`TRIGRAM_SEARCH(:title, eBook.title) > 0.4`, { title });
    }
    const result = await eBooks.getMany();
    return result;
  }

خاتمة
يوفر بحث Trigram طريقة قوية لتنفيذ المطابقة الغامضة في قواعد بيانات MySQL. من خلال تقسيم النص إلى أشكال ثلاثية، يمكننا إجراء عمليات بحث أكثر مرونة وتسامحًا، مما يعزز بشكل كبير تجربة المستخدم في التطبيقات التي يكون فيها البحث عن النص أمرًا بالغ الأهمية.
على الرغم من أن هذا النهج يتمتع بنقاط قوة، فمن المهم التفكير في بدائل مثل مسافة Levenshtein أو خوارزميات soundex اعتمادًا على حالة الاستخدام المحددة ومتطلبات الأداء.
من خلال تنفيذ بحث trigram، يمكنك تحسين إمكانات البحث لتطبيقات Node.js وMySQL بشكل كبير، مما يوفر للمستخدمين نتائج بحث أكثر ذكاءً وتسامحًا.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ [email protected]
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3