MySQL: سلوك غير متوقع "في الوضع المنطقي"
سؤال
أستخدم المكالمة التالية للحصول على معلومات من قاعدة بيانات:
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 في التعليمات التي تلي هذه القائمة.