![]() |
חיפוש בבסיס נתונים: Like מורחב?
שלום.
נגיד ויש לי משפט: I want to work. נניח ואדם חיפוש I want אז הכל בסדר, במידה והוא מחפש I work הוא לא מקבל כלום, למה? אני רוצה שהחיפוש יהיה מאוד רחב. חשבתי לקחת את המשפט, לפרק אותו למילים עם explode ואז להריץ LIKE על כל אחד אבל איך עושים זאת? איך מריצים את ה LIKE על כל אחד? תודה! |
תקרא על MATCH AGAINST.
|
בקושי יש על זה מידע..
עשיתי כך: HTML קוד:
$query = "SELECT * FROM `blabla` WHERE MATCH(`bla`) AGAINST('" . $search . "')"; בטוח שאין שיטה יותר נוחה? תודה. |
הגדרת את השדה בתור full text field (או משהו בסגנון, לא זוכר בדיוק)?
ויש עוד כל מיני מנועי חיפוש אבל זה הכי פשוט לשימוש שמגיע עם mysql |
http://phpguide.co.il/%D7%97%D7%99%D...7%9C%D7%90.htm
יש פה הסבר די טוב על זה זה הרבה יותר יעיל ומדוייק מלהשתמש בלייק, אבל בכל מקרה - את מה שאמרת עושים ככה: PHP קוד:
|
ציטוט:
תודה אבל החיפוש ממש גרוע! זה הקוד: $args = array('title'); // PHP קוד:
How to plan amazing trip ואני מחפש: how to amazing זה לא מוצא..למה? תודה. |
תריץ את השאילתא הזאת בדאטהבייס שלך (דרך ה-phpMyAdmin) ותגיד אם זה מחזיר משהו:
קוד:
SELECT title FROM tutorials WHERE 1 OR (title LIKE '%how%' OR title LIKE '%to%' OR title LIKE '%amazing%') |
כן מחזיר..
|
אז תשנה את זה:
PHP קוד:
PHP קוד:
|
החיפוש יותר נחמד אבל עדיין גרוע בכללי..
למשל יש לי: How to plan amazing trip אם אני רושם trip זה מוצא, אם אני רושם plan זה מוצא..אם אני רושם how to plan אז הוא מוצא אותו ממש ממש ממש למטה..כאילו הוא לא הכי רלוונטי כרגע..יש מעליו עשרות שיש בהם רק את המילה how למשל.. לא מבין את זה! בבקשה עזרה, תודה! :) |
אין פה שום חישוב של רלוונטיות לביטוי חיפוש במה שנתתי לך, אמרתי שעדיף לא להשתמש בזה..
MATCH AGAINST עושה את החיפוש הזה הרבה יותר טוב, הרבה יותר מהר והרבה יותר פשוט |
גם זה לא פתר את הבעיה..חיפוש צולע במיוחד..
משתגע.. נוותר.. תודה. |
אולי תנסה לקרוא על זה: http://phpguide.co.il/%D7%97%D7%99%D...7%9C%D7%90.htm
|
ציטוט:
אני מחפש משהו שאם יש לי את המשפט הבא: ילד חגג יום הולדת אז אם ירשמו "ילד" יקבלו, אם ירשמו "הולדת" יקבלו..אם ירשמו "ילד הולדת" גם יקבלו.. תודה. |
משהו שרשמתי: (אין פה סידור של רלוונטיות)
PHP קוד:
אבל כמו שאמרו לך פה, MATCH AGAINST זה הכי נוח לדעתי. |
ציטוט:
ד"א - אם הביטוי הוא אי זוגי זה יקצץ מילה בסוף ועוד ד"א.. מה ההגיון פה? PHP קוד:
|
כנראה שלא פתחתי את הראש עד הסוף, לא נורא זה משהו מהיר שפשוט רשמתי, ברור שהוא לא הולך להעלות אותו ככה וצריך להעביר שינויים
בקשר להגיון, זה משהו שרשמתי לפני שהוספתי את התנאי הראשון, אז שכחתי להסיר את התנאי השני -_- |
חיים תודה על הקוד..סביר..הוא מוצא טוב רק בהנחה שאני כותב את המילה הניישה, אחרך הרביעית הוא מוצא..למשל אם יש לי:
ילד הלך לגן ביום ראשון אם מחפשים ילד הלך זה מוצא אם מחפשים הלך לגן זה מוצא אבל אם מחפשים ילד ראשון זה לא מוצא.. אני חייב שהחיפוש יהיה מעולה..אחרת אני אאבד המון גולשים כי רוב הטראפיק בא מהמנוע חיפוש שבאתר. אשמח לעזרה, תודה! |
אם היית מסתכל על הקוד שלו היית מבין שאין מצב שזה היה מוצא משהו ב-"ילד ראשון" כי זה מחפש את 2 המילים האלו ביחד (כשהצפיפות שם היא על 2)
אבל שוב נגיד לך - MATCH AGAINST אם אתה רוצה חיפוש שעובד כמו שצריך, לפי רלוונטיות וכו' - זה הפתרון הנה כמה דוגמאות http://stackoverflow.com/questions/3...r-by-relevancy http://stackoverflow.com/questions/7...-stackoverflow http://stackoverflow.com/questions/7...r-by-relevance http://www.phpbuilder.com/board/show...59&postcount=4 |
ניסיתי את כולם שם,
הבעיה היא שיש לי כותרת כזו: How to plan a trip אם רושמים trip זה מוצא, אם רושמים plan זה מוצא, אבל אם רושמים how to זה לא מוצא. אני יודע שיש הגבלה על חיפוש מהסוג הזה אבל בכל זאת, החיפוש הזה במצבו הנוחכי לא טוב לי. אסור לי שהחיפוש יהיה צולע אחרת כל ההשקעה על האתר לחינם. עריכה: קצת מוזר אבל נראה לי שככה זה הכי טוב..השאלה האם תקני לרשום כך..: PHP קוד:
כרגע זה די טוב..אני חושב. תודה. |
אם תעשה שני LIKE על ה-title זה יהיה יותר הגיוני, במצב שלך - מה אתה עושה אם יש לך ביטוי של 10 מילים?
בכל מקרה, זה לא מוצא לך בגלל שיש הגבלה על אורך של מילה מסויימת בדיוק בגלל מילים כמו to, a, i.. אמורה להיות דרך לשנות את זה, תריץ חיפוש בגוגל |
כן, צריך לשנות את "ft_min_word_len=4" אבל אני לא מוצא איפה..
חיפשתי בגוגל, זה אמור להיות בקובץ my.cnf..לא מוצא אותו. השאלה האם אני יוכל לערוך את זה בשרת שאקנה.. בכל אופן לשאלתי, איך שרשמתי מקודם, עם השני like וה- OR באמצע, זה בסדר? ככה: PHP קוד:
תודה. |
עניתי לך על זה.. אתה יכול לכתוב ככה, אבל איך תעשה את זה בביטוי עם 10 מילים?
הקוד שהבאתי לך בהתחלה זה הפתרון למקרה הזה.. אבל בכל מקרה זה לא יעזור לך בחיפוש לפי רלוונטיות |
האמת זה עובד ממש טוב, גם בכותרת עם 10 מילים.
אם תקין לרשום כך אז אשאיר כך. תודה רבה! |
אם במקום רווח אתה שם אחוז (%) לא שידעתי על זה, במקום להפריד מילה מילה, לא יותר פשוט להחליף רווח באחוז? לדוגמה משהו כזה:
PHP קוד:
|
צודק חיים, לא חשבתי על זה..אותו אפקט ויותר פשוט.
תודה! |
ציטוט:
"aa bb cc" יהפוך ל "aa%bb%cc" יימצא את: "aa zz bb xx cc" אבל לא ימצא את: "bb xx aa zz cc" |
ציטוט:
|
כמו שנאמר לפניי חיפוש עושים בעזרת הפונקציה MATCH (השדה title צריך להיות fulltext)
אפשר לבחור בנוסף עם הפונקציה LIKE ולסדר לפי רלוונטיות של MATCH דוגמה: PHP קוד:
שים לב ש MATCH מוגדר בברירת מחדל להתעלם ממלים בנות פחות מ 4 אותיות, צריך לשנות בקונפיג ל 3 או 2 בכדי לקבל תוצאות יותר טובות. |
ואיך משנים את ההגבלה הזאת?
באיזה קובץ? איפה הוא נמצא? תודה רבה! |
ציטוט:
בדרך כלל ב etc/my.cnf תחפש בקובץ את המשתנה ft_min_word_len ותשנה לו את הערך ל 2 בכל המקומות בקובץ אל תשכח לעשות ריסטרט לאפאצ'י =] |
תודה רבה אבל איפה זה בשרת? למשל הוסטגאטור?
אפשר לשנות את זה בכל שרת? |
אם אין לך גישה לקבצי הקונפיג תבקש ממנהל השרת לעשות את זה אין סיבה שהוא לא יסכים...
|
תודה אבל אני לא מוצא את זה ב wamp..איפה זה?
תודה לכם. |
C:\wamp\bin\mysql\mysql5.5.16\my.ini
אם אין לך את המשתנה ft_min_word_len פשוט תוסיף אותו בסוף: [mysqld] ft_min_word_len=2 אל תשכח לעשות ריסטרט ל WAMP |
כל הזמנים הם GMT +2. הזמן כעת הוא 04:50. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ