كيفية "إعادة تعريف البحث" أو تصحيح "الأخطاء الإملائية" من قاعدة البيانات

StackOverflow https://stackoverflow.com/questions/2788192

  •  04-10-2019
  •  | 
  •  

سؤال

أريد إضافة ميزة جديدة إلى البحث في موقع الويب الخاص بي. أنا أستخدم PHP و MySQL. قاعدة بيانات MySQL التي تحتوي على جدول للعناصر التي يبحث عنها المستخدم ، لكل عنصر يوجد عمود "كلمة رئيسية" مفصل الكلمات المفصل "مثال: CAT ، DOG ، HORSE". بعد بحث المستخدم في موقع الويب الخاص بي ، أريد الحصول على الكلمات التي تسمح لي أن أقول "85 ٪" على غرار كلمة البحث الخاصة به ، وهذا هو لإعادة تعريف البحث. ولأخطاء أخطاء أخطاء ، أريد خدمة أو أي شيء يوفر ما إذا كانت الكلمة الرئيسية صحيحة أو أخطاء إملائية ، لذا أحصل على بعض التصحيحات وأتحقق مما إذا كانت موجودة في قاعدة البيانات ثم أعط تلك التصحيحات للمستخدم لتغيير كلمة البحث الخاصة به.

أنا لا أطلب حلًا هنا ... ولكن إذا تمكنت من توجيهي بطريقة أو بأخرى ستكون رائعة

شكرا يا رفاق

هتافات

هل كانت مفيدة؟

المحلول

المفتاح في فكرتك عن "85 ٪ مماثلة". إليكم بعض الأفكار:

جدول كلمات مماثلة

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

كلمات مماثلة

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

تحقق فقط إذا لزم الأمر:نظرًا لأنك تستخدم PHP ، فقد تفكر في PSPELL. يمكنك الاتصال أولاً pspell_check لمعرفة ما إذا كانت الكلمة مكتوبة بشكل صحيح. ثم اتصل pspell_suggest للحصول على اقتراحات.

انظر هذا الرابط للحصول على مثال.

استخدم ميزة قاعدة البيانات

MySQL ، على سبيل المثال لديه ملف SOUNDS_LIKE المشغل أو العامل. يمكنك البحث عن WHERE keyword SOUNDS_LIKE 'kat' و (من المفترض) الحصول على cat. مزيد من المعلومات موجود على صفحة التوثيق, ، الذي ينبهك إلى بعض القيود (مثل اللغة الإنجليزية و UTF-8 فقط).


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

يجب أن يسمح لك الأولان بتلبية فكرة تشابه 85 ٪. ليس لدي أي فكرة عن مدى نجاح الخيار الثالث ، لكنه "Soundz Kool".

نصائح أخرى

هناك مماثل _text () في PHP ، ولكن هذا بعد الاستعلام ؛ يمكنك أيضًا التحقق من البحث عن النص الكامل في MySQL.

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

تحرير المسافة

Apache Solr هي منصة بحث مفتوحة المصدر لا توفر فقط إمكانات البحث النصية الكاملة ولكن أيضًا مع نقاط المطابقة المدمجة وأنظمة التوفيق التلقائي ، من بين العديد من الآخرين ميزات قوية.

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

يمكن معالجة الاتصال بين تطبيقك و SOLR من خلال واجهة REST القياسية. AFAIK هناك مكتبتان جيدان لـ SOLR المحددة المتاحة في الوقت الحالي:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top