تنفيذ البحث النصي الكامل في SQL Server: دليل شامل

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

المشكلة

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

  • البحث عن Fry أعطى النتيجة المتوقعة لـ “فيليب فراي”.
  • ومع ذلك، عند البحث عن فيليب فراي، Fr، أو Phil، لم تظهر أي نتائج.
  • تم ملاحظة سلوك غير متناسق أيضًا لأسماء أخرى، مثل Wong.

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

الحل

الخبر الجيد هو أنه مع بعض التعديلات على الاستعلام، يمكن أن يعمل البحث النصي الكامل بشكل صحيح ويوفر النتائج المطلوبة حتى مع المدخلات الجزئية. إليك كيفية إجراء التعديلات على استعلام SQL:

الخطوة 1: تعديل سلسلة البحث

التعديل الرئيسي هو كيفية بناء سلسلة البحث. بدلاً من الاعتماد فقط على المدخلات المباشرة، يمكننا استخدام أحرف البدل (*) وتقسيم المدخلات عند المسافات لإنشاء نمط بحث أكثر مرونة.

مثال على التنفيذ

إليك النسخة المعدلة من استعلام SQL:

@Name nvarchar(100),
...
-- إضافة هذا السطر لتنسيق سلسلة البحث بشكل صحيح
DECLARE @SearchString varchar(100)

-- استبدال المسافات بأنماط البدل
SET @SearchString = REPLACE(@Name, ' ', '*" OR "*')
SET @SearchString = '"*'+@SearchString+'*"'

SELECT Per.Lastname, Per.Firstname, Per.MiddleName
FROM Person as Per
INNER JOIN CONTAINSTABLE(Person, (LastName, Firstname, MiddleName), @SearchString) AS KEYTBL
ON Per.Person_ID = KEYTBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEYTBL.RANK DESC;

تفسير التغييرات

  1. إضافة أحرف البدل: من خلال إضافة * قبل وبعد عبارات البحث، نسمح لـ SQL Server بالتقاط المطابقات الجزئية. هذا يعني أنه إذا بحث المستخدم عن فيليب، فسوف يجد أسماء تشمل فيليب.

  2. معالجة المسافات: تقوم دالة REPLACE بتحويل المدخلات مثل Amy Wong إلى تنسيق يمكن لـ SQL Server تفسيره كعبارات منفصلة. تستبدل المسافات بتنسيق البحث المطلوب للعثور على التنوعات.

  3. تصفية الرتبة: يضمن الاستعلام أيضًا أن تظهر فقط النتائج ذات RANK معين، مما يساعد في إعطاء الأولوية لأكثر المطابقات ملاءمة.

الخاتمة

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

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