مقدمة
في التطبيقات الحديثة، يعد البحث الفعال عن النص أمرًا بالغ الأهمية، خاصة عند التعامل مع قواعد البيانات الكبيرة. على الرغم من أن 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 بشكل كبير، مما يوفر للمستخدمين نتائج بحث أكثر ذكاءً وتسامحًا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3