كيفية استخدام البحث عن نص كامل في MySQL – CloudSavvy IT
البحث عن نص كامل هو تقنية قاعدة بيانات تقوم باسترداد السجلات حتى لو لم تتطابق تمامًا مع معايير البحث الخاصة بك. هذا يسمح ببحث أكثر طبيعية وغنية باللغة الطبيعية.
سيؤدي البحث عن “محرك قاعدة بيانات” باستخدام البحث في النص الكامل إلى عرض نتائج تحتوي على عبارة “قاعدة بيانات” أو “محرك” أو “محرك قاعدة بيانات”. يمكن أن يؤدي ذلك إلى حل الالتباسات المحتملة في معايير البحث ، لذلك سيستمر عرض سطور مثل “لدي قاعدة بيانات ومحرك”.
يمكن استخدام LIKE
المشغل أو العامل. هذا غير فعال ومحدود في الوظائف. تحتاج MySQL عادةً إلى إجراء مسح كامل للجدول لتحديد السجلات التي تطابق استعلامك.
تستخدم استعلامات النص الكامل فهارس تم إنشاؤها خصيصًا لتحسين الأداء. يتيح هذا أيضًا لـ MySQL تتبع الكلمات في مجموعة البيانات ، وبالتالي تسهيل عمليات البحث عن اللغة الطبيعية.
قم بإعداد البحث عن نص كامل
يمكنك فقط استخدام البحث عن نص كامل في الأعمدة التي تحتوي على فهرس نص كامل.استعمال FULLTEXT
بند في CREATE TABLE
البيان الذي سيتم تعيينه عند زرع وضع قاعدة البيانات.يمكنك أيضًا دمجها مع ملفات ALTER TABLE
أضف فهرس بحث إلى عمود موجود.
CREATE TABLE articles(content TEXT, FULLTEXT (content)); ALTER TABLE articles ADD FULLTEXT (content);
بمجرد أن يكون لديك فهرس ، يمكنك البدء في الاستعلام عن قاعدة البيانات.
استخدم البحث عن نص كامل
البحث عن نص كامل WHERE
شروط.انت تستخدم MATCH AGAINST
بدلا من LIKE
. تحتاج إلى الإشارة إلى عمود الفهرس للمطابقة والاستعلام المراد البحث فيه.
SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' IN NATURAL LANGUAGE MODE);
سيستخدم هذا الاستعلام لإجراء بحث نص كامل database engine
.بالتعيين IN NATURAL LANGUAGE MODE
، يوجه MySQL لتفسير الاستعلام حرفيًا وعدم معالجته بأي شكل من الأشكال. إذا لم يتم تحديده ، فهذا هو وضع البحث الافتراضي.
فرز النتائج حسب الصلة
تتمثل إحدى مزايا البحث عن نص كامل في أنه يسمح لك بفرز السجلات التي تم إرجاعها حسب الصلة.بالنسبة للروتين ، هذا مستحيل LIKE
يطلب.يمكنك استخدامها MATCH ... AGAINST
فقرة كجزء من SQL SELECT
. سيحتوي العمود الافتراضي الذي تم إرجاعه على درجة ملاءمة من 0 إلى 1 ، مما يشير إلى مدى تطابق السجل مع استعلام البحث.
SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles ORDER BY relevance DESC
سيعرض الاستعلام النتائج الأكثر صلة أولاً. يمكن أن يساعد هذا التطبيق الخاص بك على تلبية توقعات المستخدم حول كيفية أداء نظام البحث باللغة الطبيعية.
تحسب MySQL النتائج المتعلقة بالبحث من خلال تقييم عدة عوامل مختلفة. يتضمن ذلك عدد السجلات المطابقة للاستعلام وعدد مرات حدوث الاستعلام في كل سجل. سيتم تصنيف النتائج التي تتطابق تمامًا مع الاستعلام أعلى من النتائج التي تحتوي على جزء فقط من الاستعلام.
عند استخدامه MATCH ... AGAINST
في SELECT
أعلن أنك لست بحاجة إلى ذلك WHERE
شروط. يمكنك تصفية النتائج يدويًا لتضمين فقط السجلات ذات درجة الارتباط غير الصفرية.
SELECT content, MATCH (content) AGAINST ('database engine') AS relevance FROM articles WHERE relevance > 0 ORDER BY relevance DESC
وضع توسيع الاستعلام
اللغة الطبيعية ليست هي وضع البحث عن النص الكامل الوحيد المدعوم. يعد وضع توسيع طلب البحث طريقة بديلة يمكن أن تساعد في توسيع نطاق نتائج البحث. يقوم تلقائيًا بتقييم استعلامات البحث بناءً على المصطلحات الأكثر صلة.
يبدأ البحث الموسع بالبحث عن السجلات التي تحتوي على تطابق مع الاستعلام. ثم تحقق من هذه السجلات لتحديد الكلمات الأكثر صلة.ثم يتم تشغيل قاعدة البيانات آخر ابحث هذه المرة بناءً على المصطلحات ذات الصلة بدلاً من الاستعلام الأصلي. ينتج عن هذا عادةً إرجاع المزيد من السجلات مع الحفاظ على مستوى مقبول من الصلة.
طريقة تمكين وضع توسيع الاستعلام كما يلي:
SELECT * FROM articles WHERE MATCH (content) AGAINST ('database engine' WITH QUERY EXPANSION)
الوضع المنطقي
وضع البحث النهائي عن النص الكامل هو الوضع المنطقي. هذا يسمح لك بتضمين المعدلات المنطقية في الاستعلام. يمكن استخدام هذا الوضع عندما يكون التحكم المتقدم في منطق المطابقة مطلوبًا.
يمكنك إضافة بادئة لكل نتيجة للمطالبة بأن تحتوي كل كلمة على كلمة واحدة +
.استعمال -
استبعاد النتائج التي تحتوي على كلمات.يمكن استخدام عوامل التشغيل الأخرى لمطابقة جزء من كلمة وإنشاء تعبيرات فرعية وإنشاء كلمات أرجع للخلف – قلص درجة الملاءمة. قد يكون الأخير مفيدًا عند إخفاء مصطلح “الضوضاء”.إذا لم تحدد عامل تشغيل ، فهذا يعني أنه سيتم اقتباس الكلمة في الاستعلام بـ OR
.
SELECT * FROM articles WHERE MATCH (content) AGAINST ('+data* engine -sqlite' IN BOOLEAN MODE)
سيبدأ الاستعلام بمقالات تبدأ بكلمة واحدة على الأقل data
أين هي sqlite
لم يذكر.كل نتيجة قد تحتوي أو لا تحتوي على كلمات engine
.
يتيح لك الوضع المنطقي إنشاء عمليات بحث قوية باستخدام منطقك الخاص. أحد التحذيرات هو أنه لا يدعم تسجيل مدى صلة البحث. هذا حل وسط يمكّن المستخدمين من إجراء عمليات بحث منطقية. قد لا يتطابق الترتيب الناتج مع توقعات الأشخاص.
تكوين البحث عن نص كامل
يأتي MySQL بالعديد من خيارات تكوين النص الكامل التي تسمح لك بضبط طريقة البحث. فيما يلي بعض من أهمها.
innodb_ft_min_token_size
– تعيين الحد الأدنى لطول كلمة كلمات الفهرس. لن تتم إضافة الكلمات ذات الأحرف الأقل من هذه القيمة إلى الفهرس ، لذلك لن تتمكن من البحث عنها.النظام الأساسي3
، والذي يستبعد أشياء مثلa
وan
معI
. ينطبق هذا الإعداد على جداول InnoDB.استعمالft_min_word_len
من أجل MyISAM.innodb_ft_max_token_size
-مشابه لinnodb_ft_min_token_size
،هذا سوف أقصى طول مصطلح المؤشر. لن تكون الكلمات الأطول قابلة للبحث.استعمالft_max_word_len
تستخدم لجداول MyISAM.innodb_ft_enable_stopword
– افتراضيًا ، يتم تشغيل هذا الإعداد ، مما يسمح لك بالتحكم في ما إذا كان يجب على MySQL تصفية “كلمات الإيقاف”. كلمات الإيقاف هي كلمات شائعة جدًا وقد تؤثر بشكل غير صحيح في نتائج البحث. تحتوي قائمة كلمات الإيقاف الافتراضية على 36 عبارة شائعة.innodb_ft_user_stopword_table
-يمكنك تعيين هذه القيمة على اسم جدول قاعدة البيانات ، ويجب أن تحصل MySQL على قائمة كلمات الإيقاف من جدول قاعدة البيانات.يجب أن يحتوي الجدول على ملفVARCHAR
العمود يسمىvalue
. أضف كلمات التوقف لاستبعادها كسجلات في هذا الجدول.
عادة ما يتم تعيين هذه الإعدادات في ملف تكوين خادم MySQL.يختلف الموقع من منصة إلى أخرى ؛ ويمكن العثور عليه عادةً على /etc/mysql/my.cnf
. بعد تغيير الإعدادات ، تحتاج إلى إعادة تشغيل خدمة MySQL.
بعد عمل نسخة احتياطية من الخادم ، أعد إنشاء فهرس النص الكامل للجدول. يجب عليك القيام بذلك لإعادة فهرسة البيانات باستخدام التكوين الحالي. خلاف ذلك ، سيستمر استخدام البيانات المفهرسة مسبقًا.
لإعادة فهرسة جداول InnoDB ، قم بتشغيل OPTIMIZE TABLE my_table
.بالنسبة لجداول MyISAM ، استخدم REPAIR TABLE my_table QUICK
. سيتم بعد ذلك إعادة بناء فهرس البحث حتى تدخل تغييرات التكوين حيز التنفيذ.
التعميم
قم بتمكين البحث عن نص كامل في MySQL عن طريق إضافة ما يلي FULLTEXT
فهرس في مجال البحث الخاص بك.ثم تستخدم MATCH ... AGAINST
استخدم أحد أوضاع البحث الثلاثة للحصول على النتائج. تعرض استعلامات اللغة الطبيعية نتائج البحث ذات الصلة ، والتي يمكنك استخدامها لترتيب النتائج.
مقارنةً بالبحث عن نص كامل ، يوفر البحث عن نص كامل سلوك بحث أكثر قوة LIKE
بيان. كما أنه يتمتع بأداء أعلى ، خاصة على مجموعات البيانات الكبيرة ، لأن كل النصوص مفهرسة مسبقًا.