سؤال

أستخدم المكالمة التالية للحصول على معلومات من قاعدة بيانات:

select * 
from submissions 
where 
   match( description ) against ('+snowboard' in boolean mode ) 
   and (!disabled or disabled='n') 
order by datelisted desc limit 30

وهو ما يعني كل شيء مع "التزلج على الجليد" في الوصف. الآن هذه هي المشكلة:

select *
from submissions 
where 
  match( description ) against ('+snowboard +mp4' in boolean mode ) 
  and (!disabled or disabled='n') 
order by datelisted desc limit 30

سوف يتجاهل +mp4 لسبب ما وإرجاع نفس الاستعلام الأول

select * 
from submissions 
where 
   match( description ) against ('+mp4' in boolean mode ) 

لا يعيد أي شيء ، لذلك يبدو أنه يتم تجاهله في البحث

هل يعرف أي شخص كيف يعمل حول هذا السلوك؟

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

المحلول

لن يطابق وضع MySQL المنطقي فقط الكلمات التي تكون أطول من طول معين. و mp4 قصير جدا. يجب عليك إعادة ترجمة MySQL لتغيير العتبة

تحرير: تبين ، يمكن الآن تعيين هذا عبر ملف التكوين ، انظر http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html للمرجعية furhter

نصائح أخرى

مشكلتك هي الحد الأدنى لطول الكلمة ، والذي افتراضيًا هو 3 أحرف. جرب الشيء نفسه مع +snowboard +scooter وسوف ترى أنه يعمل. (لنفترض أنه ليس لديك دراجات بخارية في قاعدة البيانات الخاصة بك ، بالطبع).

نرى البحث عن MySQL Full Text Search حول كيفية تغييره:

يتم تعريف الحد الأدنى والحد الأقصى لأطوال الكلمات المراد فهرستها بواسطة ft_min_word_len و ft_max_word_len متغيرات النظام. (انظر القسم 5.1.4 ، "متغيرات نظام الخادم".) القيمة الدنيا الافتراضية هي أربعة أحرف ؛ الحد الأقصى الافتراضي هو الإصدار. إذا قمت بتغيير أي من القيمة ، فيجب عليك إعادة بناء فهارس النص الكامل. على سبيل المثال ، إذا كنت تريد أن تكون الكلمات ثلاثية الأشرطة قابلة للبحث ، فيمكنك تعيين متغير FT_MIN_WORD_LEN عن طريق وضع الأسطر التالية في ملف الخيار:

[mysqld] ft_min_word_len=3

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

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