الأدلة

كيفية إضافة البحث إلى تطبيقك: من الفلاتر البسيطة إلى البحث في النص الكامل

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

ماذا يعني "البحث" لتطبيقك

يغطي البحث عدة أشياء مختلفة، ومعظم التطبيقات تحتاج إلى أكثر من واحدة منها:

  • البحث بالكلمات المفتاحية: مربع نص، مثل "ابحث عن الإعلانات التي تذكر 'حديقة'".
  • الفلاتر: خيارات منظمة، مثل الفئة، والمدينة، ونطاق السعر، والتاريخ، والحالة.
  • الترتيب: الأحدث، أو الأرخص، أو الأكثر صلة.
  • الإكمال التلقائي: اقتراحات أثناء الكتابة.
  • تحمّل الأخطاء الإملائية: "restuarant" ما زالت تجد "restaurant".

بالنسبة لدليل أو لوحة وظائف أو متجر، تكون الفلاتر في الغالب أهم من مربع النص. حدد أيّ هذه الأشياء تحتاجها فعلاً قبل اختيار الأداة.

خياراتك

الأسلوبطريقة العملمناسب لـالقيود
التصفية في المتصفحتحميل القائمة وتصفيتها بجافاسكربتالقوائم العامة الصغيرة (بضع مئات من العناصر)يرسل كل البيانات إلى كل زائر؛ وبطيء مع القوائم الكبيرة
مطابقة النمط في قاعدة البياناتاستعلام على الخادم مثل "الاسم يحتوي على النص"، دون حساسية لحالة الأحرفالتطبيقات الصغيرة والمتوسطة، وأدوات الإدارةلا ترتيب؛ وقد يبطؤ مع الجداول الكبيرة؛ لا اجتزاء للكلمات
البحث النصي الكامل في قاعدة البياناتيفهرس Postgres الكلمات ويرتب المطابقاتمعظم التطبيقات كثيفة المحتوىضعيف أمام الأخطاء الإملائية إلا إذا أضفت مطابقة تقريبية
المطابقة التقريبية (الثلاثيات)يقارن Postgres تسلسلات الأحرف للتشابهالأسماء والحقول القصيرة، وتحمّل الأخطاء الإملائيةيحتاج إلى امتداد وفهرس؛ والضبط يأخذ وقتاً
محرك بحث مستضافخدمة منفصلة تفهرس بياناتك (Algolia، وMeilisearch، وTypesense، وElasticsearch وغيرها)الكتالوجات الكبيرة، والبحث الفوري، وتحمّل كبير للأخطاء الإملائيةخدمة أخرى يجب إبقاؤها متزامنة، ودفع ثمنها، وتأمينها

إذا كانت بياناتك موجودة بالفعل في Postgres، فإن البحث النصي الكامل المدمج فيه خيار وسط قوي. يقسّم النص إلى كلمات، ويردّها إلى جذورها (بحيث تطابق "running" كلمة "run")، ويتجاهل الكلمات الشائعة، ويستطيع ترتيب النتائج بحسب مدى تطابقها. ومع الفهرس المناسب يبقى سريعاً على الجداول الكبيرة.

مطالبات أمثلة

بداية بسيطة:

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

الترقية إلى البحث النصي الكامل:

حوّل بحث الإعلانات إلى البحث النصي الكامل في Postgres على العنوان (بوزن أعلى) والوصف. أضف الفهرس المناسب، ورتّب النتائج حسب الصلة، واحتفظ بالفلاتر والتقسيم إلى صفحات الحاليين. لا تغيّر أي بيانات موجودة.

إضافة تحمّل للأخطاء الإملائية في الأسماء:

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

خطوة بخطوة

  1. اكتب ما يبحث عنه الناس. ما الحقول (العنوان، والوصف، والوسوم، والاسم)؟ وما الفلاتر؟ اسأل بعض المستخدمين الحقيقيين إن استطعت.
  2. ابدأ من الخادم. أضف مساراً في الواجهة البرمجية يستقبل الاستعلام والفلاتر، ويعيد صفحة واحدة من النتائج. لا تحمّل كل شيء في المتصفح.
  3. طبّق الصلاحيات في الاستعلام. إذا كان المستخدمون يرون سجلاتهم فقط، أو المنشورة فقط، فهذا الشرط يجب أن يكون في الاستعلام نفسه الذي يحوي البحث.
  4. أضف التقسيم إلى صفحات من اليوم الأول: أرقام صفحات أو زر "تحميل المزيد".
  5. ضع حالة البحث في الرابط (مثلاً ?q=garden&city=leeds). تتيح الروابط القابلة للمشاركة، ويعمل زر الرجوع، ويستطيع محركو البحث زحف الصفحات المفلترة إذا أردت ذلك.
  6. أخّر البحث أثناء الكتابة (debounce). انتظر بضع مئات من الميلي ثانية بعد توقف الكتابة قبل الاستعلام، حتى لا ترسل طلباً مع كل ضغطة مفتاح.
  7. أضف الفهارس بعد أن تعرف الأعمدة التي تفلتر عليها وتبحث فيها.
  8. رقِّ الحل إلى البحث النصي الكامل، ثم المطابقة التقريبية، ثم محرك مستضاف، ولكن فقط عندما تفشل الخطوة الأبسط أمام مستخدمين حقيقيين.
  9. اختبر ببيانات واقعية: مئات أو آلاف الصفوف، ورموز غريبة، واستعلامات فارغة، واستعلامات طويلة جداً، ولغات أخرى إذا كنت تدعمها.

أخطاء شائعة

  • تحميل الجدول كاملاً في المتصفح. مقبول لـ 50 عنصراً، ومؤلم لـ 50,000، وهو يكشف كل سجل، بما فيها تلك التي لا يجب أن يراها المستخدم.
  • بحث يتجاهل الصلاحيات. البحث مصدر تسريب شائع: يظهر سجل خاص أو مسودة لأن استعلام البحث نسي شرط "الخاص بي فقط" أو "المنشور فقط".
  • بناء SQL من مدخلات المستخدم الخام. استخدم دائماً الاستعلامات المعلمة (parameterised). ومنشئ التطبيقات بالذكاء الاصطناعي يفعل ذلك عادةً، لكن تحقق إذا رأيت سلاسل نصية تُلصق ببعضها.
  • عدم وجود حالة فارغة. رسالة "لا توجد نتائج" مع اقتراح (امسح الفلاتر، وتحقق من الإملاء) تمنع الناس من المغادرة.
  • عدم وجود فهارس. يبدو البحث جيداً مع البيانات التجريبية ويبطؤ مع نمو البيانات الحقيقية.
  • القفز مباشرة إلى خدمة بحث. ستحتاج عندها إلى نسخة ثانية من بياناتك تبقى متزامنة، والتعامل مع الحذف، وتأمين مجموعة أخرى من المفاتيح، غالباً دون مكسب ظاهر.
  • نسيان الهاتف. يجب أن تتسع الفلاتر على شاشة الهاتف؛ ولوحة فلاتر قابلة للطي تعمل غالباً أفضل من الشريط الجانبي.

قائمة التحقق

  • تعرف الحقول التي يُبحث فيها والفلاتر الموجودة
  • يعمل البحث على الخادم ويعيد نتائج مقسّمة إلى صفحات
  • يفرض الاستعلام نفس الصلاحيات المطبقة في بقية التطبيق
  • تُمرَّر مدخلات المستخدم كمعاملات، ولا تُلصق أبداً في SQL
  • حالة البحث موجودة في الرابط
  • الكتابة مؤخرة (debounced)
  • الأعمدة المبحوث فيها والمفلترة مفهرسة
  • حالات الفراغ، وعدم وجود نتائج، والخطأ واضحة
  • مُختبر بأحجام بيانات واقعية ومدخلات فوضوية

إضافة البحث باستخدام Mythex

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

البحث هو قلب كثير من التطبيقات: انظر كيفية بناء موقع دليل وكيفية بناء لوحة وظائف وكيفية بناء سوق إلكتروني لمعرفة كيف يتناسب البحث مع بقية المنتج.

الأسئلة

ما أسهل طريقة لإضافة البحث إلى تطبيق؟

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

هل أحتاج إلى Algolia أو Elasticsearch للبحث؟

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

لماذا لا يجد بحثي النتائج عند وجود أخطاء إملائية؟

المطابقة الأساسية والبحث النصي الكامل القياسي يبحثان عن الكلمات كما كُتبت (أو عن جذورها)، لذا يفوتهما الخطأ الإملائي. تحتاج إلى مطابقة تقريبية (fuzzy matching)، مثل تشابه الثلاثيات (trigram) في Postgres، أو محرك بحث يتحمل الأخطاء الإملائية.

هل يجب أن يعمل البحث في المتصفح أم على الخادم؟

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

Mythex · Pricing · ابنِ أي شيء بالذكاء الاصطناعي · قوالب المواقع والتطبيقات · مقارنات Mythex · مصطلحات بناء التطبيقات بالذكاء الاصطناعي · أدوات مجانية لبناء التطبيقات بالذكاء الاصطناعي · English

English አማርኛ Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)