PDA

View Full Version : جستجو در دیتابیس



mohamad3519
شنبه 11 فروردین 1397, 09:39 صبح
سلام. یه مشکل دارم . میخوام یه رشته رو توی دیتابیس MySQL جستجو کنم. اگر مشابهش توی دیتابیس بود هم پیدا بشه .
یعنی مثلا من اگر جستجو کردم «سلام حال شما چطور است» اگر در دیتابیس عبارت «سلام کردن چطور است» بود پیدا بشه.
استفاده از LIKE حداقل به اون شکلی که من میدونم به دردم نمیخوره خیلی نتایج خوبی برنمیگردونه . این که بیایم کلمات رشته رو explode کنیم و دونه دونه با LIKE چک کنیم هم نتایج دقیقی برنمیگردونه . ممنون میشم کمکم کنید.

Farshid007
سه شنبه 14 فروردین 1397, 03:26 صبح
با ویلدکارد ها نمیشه ؟؟
https://www.w3schools.com/sql/sql_wildcards.asp

mohamad3519
سه شنبه 14 فروردین 1397, 10:48 صبح
با ویلدکارد ها نمیشه ؟؟
https://www.w3schools.com/sql/sql_wildcards.asp

مشکل من ترتیبه .
چیزی که تو ذهن من هست اینه که وقتی سرچ میکنم « آهنگ حمید عسکری اگه به تو نمیرسم »
بیام اینو کلمه به کلمه explode کنم و بعد تک تک کلمه ها رو با LIKE از دیتابیس بخونم.
اگر بشه کاری کرد که ترتیب جوری باشه که اونی که بیشترین تعداد کلمات مشترک با متن جستجو شده رو داره بالاتر بیاره مشکل حله.
ولی اینجوری وقتی سرچ کنی « آهنگ حمید عسکری اگه به تو نمیرسم »
نتایجی میاره مثل :
آهنگ حمید صفت بخشش » چون «حمید» داره !
امیر تتلو اگه راستشو بخوای » چون «اگه» داره !

حالا اون آهنگ حمید عسکری هم میاره !
ولی بالا نیست.
چجوری مرتب کنم

یا اگر راه دیگه ای هست دنبالشم

sara_aryanfar
سه شنبه 14 فروردین 1397, 10:52 صبح
مشکل من ترتیبه .
چیزی که تو ذهن من هست اینه که وقتی سرچ میکنم « آهنگ حمید عسکری اگه به تو نمیرسم »
بیام اینو کلمه به کلمه explode کنم و بعد تک تک کلمه ها رو با LIKE از دیتابیس بخونم.
اگر بشه کاری کرد که ترتیب جوری باشه که اونی که بیشترین تعداد کلمات مشترک با متن جستجو شده رو داره بالاتر بیاره مشکل حله.
ولی اینجوری وقتی سرچ کنی « آهنگ حمید عسکری اگه به تو نمیرسم »
نتایجی میاره مثل :
آهنگ حمید صفت بخشش » چون «حمید» داره !
امیر تتلو اگه راستشو بخوای » چون «اگه» داره !

حالا اون آهنگ حمید عسکری هم میاره !
ولی بالا نیست.
چجوری مرتب کنم

یا اگر راه دیگه ای هست دنبالشم

خب از منطق فازی بهره ببر یعنی بیشترین شبهت ها رو بردار و چون یه عنوان تنها حمید رو داره برات نمیاره اینجوری باید اعضای بیشتری از عنوان رو داشته باشه تا برات بیاره

plague
سه شنبه 14 فروردین 1397, 15:37 عصر
match against رو تست کن
باید فیلد هارو فول تکست ایندکس کنی و سرچ هم بایدحداقل 3-4 کاراکتر باشه

یه انجین هم هست به اسم sphinx که کارش همینه ولی اون رو باید نصب کنی

mohamad3519
شنبه 18 فروردین 1397, 14:19 عصر
خب از منطق فازی بهره ببر یعنی بیشترین شبهت ها رو بردار و چون یه عنوان تنها حمید رو داره برات نمیاره اینجوری باید اعضای بیشتری از عنوان رو داشته باشه تا برات بیاره

میشه بیشتر راهنمایی بفرمایین ...

mohamad3519
شنبه 18 فروردین 1397, 14:20 عصر
match against رو تست کن
باید فیلد هارو فول تکست ایندکس کنی و سرچ هم بایدحداقل 3-4 کاراکتر باشه

یه انجین هم هست به اسم sphinx که کارش همینه ولی اون رو باید نصب کنی


match against میزنم ارور میده .
میشه یه نمونه کد الگو برا تست بدین ببینم اشتباهم چیه ؟

plague
شنبه 18 فروردین 1397, 15:27 عصر
چه ارروری میده ؟
همونجور یکه گفتم باید فیلدت رو fulltext index کنی که innodb قبلا نداشت و اگه دیتبایست قدیمی باشه مجبوری تیبل رو قبلش به myisam تبدیل کنی

نمونه کد سرچ کن تو نت هست

mohamad3519
شنبه 18 فروردین 1397, 17:57 عصر
چه ارروری میده ؟
همونجور یکه گفتم باید فیلدت رو fulltext index کنی که innodb قبلا نداشت و اگه دیتبایست قدیمی باشه مجبوری تیبل رو قبلش به myisam تبدیل کنی

نمونه کد سرچ کن تو نت هست


دیتابیس وردپرسه . برا سایت دانلود آهنگ (http://tilarmusic.ir) میخوام ...

mohamad3519
یک شنبه 23 اردیبهشت 1397, 12:01 عصر
کسی نمیتونه کمک کنه ؟

arman-ezio
دوشنبه 31 اردیبهشت 1397, 09:53 صبح
چیزی که به ذهنم میخوره اینه که بیای با explode بشکونی بعدش بیای با دیتا بیس مقایسه کنی خب این تا اینجا . مرحله بعدش میتونی اوناییی که برگردونده رو کاراکتر هاشونو نگاه کنی با متن سرچ شده توسط کاربر مقایسه کنی. بر اساس بیشترین تشابه مرتب سازی کنی واسه این کار . میتونی از regular expression استفاده کنی واسه این کار . حالا من زیاد اطلاعاتی ندارم دوستان شاید بهتر بتونن کمک کنن