הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   רלוונטיות תוצאות חיפוש (https://hosts.co.il/forums/showthread.php?t=90027)

Erez | TrustMedia.co.il 09-06-11 17:31

רלוונטיות תוצאות חיפוש
 
יש לי אתר עם מסד נתונים שמכיל בתוכו פרטים על משהו מסויים. למשהו הזה יש תיאור, כותרת, ועוד פרטים אחרים. עכשיו אם מישהו עושה חיפוש באתר זה מביא לי את כל הפריטים שיש להם באחד מהפרמטרים שלהם (כותרת, תיאור, וכל שאר הפרטים על המשהו הזה) את מה שהגולש חיפש.
הבעיה היא שהתוצאות לא רלוונטיות ככה...
רציתי לדעת האם יש איזה שאילתא מיוחדת או שיטה מסויימת כדי להציג את הדברים בצורה יותר רלוונטית ?
כל פיתרון יתקבל בברכה

תודה :)

RAS 09-06-11 17:48

אמממ.. אתה יכול קודם כל לנסות להציג את הפריטים שהכותרת שלהם מכילה את מילת החיפוש וכן הלאה, לפי מה שעבורך רלוונטי יותר..

Erez | TrustMedia.co.il 09-06-11 18:04

ציטוט:

נכתב במקור על ידי RAS (פרסם 807064)
אמממ.. אתה יכול קודם כל לנסות להציג את הפריטים שהכותרת שלהם מכילה את מילת החיפוש וכן הלאה, לפי מה שעבורך רלוונטי יותר..

כן, אבל איך אני כותב שאילתא שתפעל ככה? אפשר רק לחלק את זה להרבה שאילתות ואיכשהו לקמבן משהו, למשל לעשות שאילתא ששולפת את כל מי שיש לו את זה בכותרת, ואז שאילתא שבודקת את כל השאר חוץ מאלה שיש להם בכותרת אבל יש להם בתיאור וכו', אבל זה הרבה שאילתות לביצוע וזה הרבה עומס.
בטוח יש איזה פקודה כלשהיא שאפשר לעשות בשאילתא

IgalSt 09-06-11 20:19

אחרי ששלפת את התוצאות,
למה שלא תרוץ עליהן בצד שרת ותספוק כמות הופעות של מחרוזת החיפוש בכל אחת מהתוצאות ותמיין לפי המונה הזה? כמו כן תוכל להחליט שאם ההופעה היא בכותרת אתה סופר את זה כפול (כי זה משהו חשוב).

Erez | TrustMedia.co.il 09-06-11 20:34

ציטוט:

נכתב במקור על ידי IgalSt (פרסם 807105)
אחרי ששלפת את התוצאות,
למה שלא תרוץ עליהן בצד שרת ותספוק כמות הופעות של מחרוזת החיפוש בכל אחת מהתוצאות ותמיין לפי המונה הזה? כמו כן תוכל להחליט שאם ההופעה היא בכותרת אתה סופר את זה כפול (כי זה משהו חשוב).

פיתרון מעניין, אבל אני מדבר על אלפי תוצאות חיפוש בד"כ, כך שלעבור בכל דף שהמשתמש גולש על כמה אלפי תוצאות זה מלא משאבים.
אפשר אולי לנסות לאחסן את זה בסשיין או בקוקיז, או אפילו בבסיס נתונים, אבל זה כנראה יהיה ארוך מדי כדי לאחסן בסשיין או בעוגיה.
אני כנראה אנסה את זה אם לא יהיו פתרונות אחרים

IgalSt 09-06-11 21:23

ציטוט:

נכתב במקור על ידי Erez.info (פרסם 807112)
פיתרון מעניין, אבל אני מדבר על אלפי תוצאות חיפוש בד"כ, כך שלעבור בכל דף שהמשתמש גולש על כמה אלפי תוצאות זה מלא משאבים.
אפשר אולי לנסות לאחסן את זה בסשיין או בקוקיז, או אפילו בבסיס נתונים, אבל זה כנראה יהיה ארוך מדי כדי לאחסן בסשיין או בעוגיה.
אני כנראה אנסה את זה אם לא יהיו פתרונות אחרים

התחלתי לכתוב פתרון נוסף שיהיה מהיר יותר בזמן ריצה, אבל החלטתי שלו.
אחרי התגובה שלך אני רואה שזה יכול להיות רלוונטי בכל זאת.

אפשר לעבוד עם תגיות אוטומטית.
אחת לכמה זמן לסרוק את הטבלה הגדולה שלך ועבור כל מילה בה ליצור רשומה טבלת תגיות ייעודית. בטבלה הזאת תשמור את ה-ID של הרשומה מהטבלה הגדולה, את המילה עצמה ואת כמות ההופעות שלה באותה רשומה. נכון שזה תופס המון מקום ולא קצת משאבים ליצר את זה, אבל ככה אתה בעצם בונה אינדקס גדול שעליו תוכל להריץ חיפוש מהיר בקלות וגם לדעת מה רלוונטיות (לפי כמות הופעות).

אם אתה רוצה לחסוך קצת משאבים, אתה יכול לשמור את שאילתות החיפוש שמריצים אצלך ואת הסריק שתארתי מקודם לעשות רק עבורן. כאשר אתה נתקבל במחרוזת חיפוש חדשה, תריץ את האינדוקס ייעודית עבורה ותציג תוצאות למשתמש (ועל הדרך תוסיף אותן לטבלה).

הכל תלוי בעלות תועלת שלך

Erez | TrustMedia.co.il 10-06-11 06:34

ציטוט:

נכתב במקור על ידי IgalSt (פרסם 807121)
התחלתי לכתוב פתרון נוסף שיהיה מהיר יותר בזמן ריצה, אבל החלטתי שלו.
אחרי התגובה שלך אני רואה שזה יכול להיות רלוונטי בכל זאת.

אפשר לעבוד עם תגיות אוטומטית.
אחת לכמה זמן לסרוק את הטבלה הגדולה שלך ועבור כל מילה בה ליצור רשומה טבלת תגיות ייעודית. בטבלה הזאת תשמור את ה-ID של הרשומה מהטבלה הגדולה, את המילה עצמה ואת כמות ההופעות שלה באותה רשומה. נכון שזה תופס המון מקום ולא קצת משאבים ליצר את זה, אבל ככה אתה בעצם בונה אינדקס גדול שעליו תוכל להריץ חיפוש מהיר בקלות וגם לדעת מה רלוונטיות (לפי כמות הופעות).

אם אתה רוצה לחסוך קצת משאבים, אתה יכול לשמור את שאילתות החיפוש שמריצים אצלך ואת הסריק שתארתי מקודם לעשות רק עבורן. כאשר אתה נתקבל במחרוזת חיפוש חדשה, תריץ את האינדוקס ייעודית עבורה ותציג תוצאות למשתמש (ועל הדרך תוסיף אותן לטבלה).

הכל תלוי בעלות תועלת שלך

במקרה הזה מדובר על מנוע חיפוש שאני מפתח. הבוט כבר חי ונושם וסורק לו להנאתו.
הפיתרון שלך לא מתאים לי כי זה מנוע חיפוש שתוצאות שהתאנדקסו לפני שבוע כבר ברוב המקרים לא יהיו רלוונטיות, אז לשמור לכל רשומה את המיקום הרלוונטי, ואז שוב אחרי שבוע לעבור מחדש זה יותר מדי משאבים.

עוד שאלה שאני מניח שהפיתרון שלהם פשוט, לדוגמא משתמש מחפש "נעליים נוחות לריצה", ו"נעליים נוחות" מופיע בכותרת, ו"לריצה" מופיע בתיאור, אז איך אני יכול לקבל את הרשומה הזאת מהמסד?

BlueNosE 10-06-11 07:52

תפרט יותר. האם התחום הסמנטי של האתרים שאתה מאנדקס הוא דומה? אם כן, יש לי רעיון מה אפשר לעשות, אבל בשביל לחסוך לעצמי באסה על בזבוז זמן, קודם תסביר פחות או יותר מה המנוע עושה (:

Erez | TrustMedia.co.il 10-06-11 08:17

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 807147)
תפרט יותר. האם התחום הסמנטי של האתרים שאתה מאנדקס הוא דומה? אם כן, יש לי רעיון מה אפשר לעשות, אבל בשביל לחסוך לעצמי באסה על בזבוז זמן, קודם תסביר פחות או יותר מה המנוע עושה (:

המנוע סורק את האתרים ושומר במסד את הפרטים, לא יכול לפרט כרגע מה המנוע מחפש
אבל לדוגמא אם זה מנוע חיפוש עבודה, אז הוא יסרוק את האתרים ושימור את הפרטים (משרה מלאה/חלקית, מיקום, תיאור וכו'), ואז ישמור במסד כל מידע בעמוד נפרדת.
ואז אני רוצה לעשות חיפוש במסד הזה.

GeffenMalki 10-06-11 08:50

האלוריתם של גוגל מורכב מהמון דברים שהופכים אותו לכל כך איכותי, אתה צריך לדאוג לאלוריתם פשוט יותר אבל נוח...
לדוגמה של המנוע חיפוש לאתרים (ככללי): לפי קטגוריה,מספר צפיות,מספר קישורים נכנסים,מספר קישורים יוצאים,כמות מילים כוללת באתר ועוד...
בעצם ליצור אלגוריתם מקיף, ואולי אפילו ליצור מין דירוג מיוחד שיעזור לאלגוריתם...

Erez | TrustMedia.co.il 10-06-11 09:15

ציטוט:

נכתב במקור על ידי GeffenMalki (פרסם 807152)
האלוריתם של גוגל מורכב מהמון דברים שהופכים אותו לכל כך איכותי, אתה צריך לדאוג לאלוריתם פשוט יותר אבל נוח...
לדוגמה של המנוע חיפוש לאתרים (ככללי): לפי קטגוריה,מספר צפיות,מספר קישורים נכנסים,מספר קישורים יוצאים,כמות מילים כוללת באתר ועוד...
בעצם ליצור אלגוריתם מקיף, ואולי אפילו ליצור מין דירוג מיוחד שיעזור לאלגוריתם...

אני לא מתיימר להיות כמו גוגל, ובמקרה שלי כל התוצאות חיפוש יהיו בעלי ערך זהה, לא תהיה תוצאה אחת שהיא יותר עדיפה מהשניה, אבל תהיה תוצאה שהיא יותר רלוונטית למילת מפתח מסויימת.
ומישהו יודע אולי אם יש פקודה לשרשור בsql, כדי לעשות משהו כזה
select * from `table` where (`column1`+`colum2`) like '%טקסט%'
??

Erez | TrustMedia.co.il 10-06-11 09:26

http://phpguide.co.il/%D7%97%D7%99%D...7%9C%D7%90.htm
מצאתי את זה, זה נראה לי מה שאני צריך
אבל לא הבנתי את הקטע להפוך את אחת העמודות לfull text, כי במקרה שלי יש לי מספר עמודות, אז איך אני אמור לעשות?
חשבתי לעשותת עוד עמודה שתכיל את כל המידע עם רווחים, אבל זה יקח הרבה מקום וזה לא יעיל

עריכה:
http://www.stemkoski.com/multiple-co...ase-using-php/
זה מסביר את העניין למי שצריך. בגדול יש פקודה match שמאפשר גם לעשות חיפוש, וגם מאפשר לדעת עד כמה התוצאה רלוונטית למילת החיפוש, ואז אפשר למיין לפיה את התוצאות.

BlueNosE 10-06-11 11:14

הרעיון שלי הוא כזה. הרי אתה יודע שהתחום הוא, נגיד, עבודה.
ביטויים שקשורים בעבודה יכולים להיות כמובן "חיפוש","משרה" ו"בוס" - אבל גם "מתכנת","גנן" ו"רואה חשבון". אפילו "טכנולוגיה" או "24 שעות ביממה" אלו ביטויים עם משמעות.

המלצה שלי: צור מערכים עם שיוך לתגיות. לדוגמא, צור את הרצף הבא: מתכנת -> טכנולוגיה, תכנות. גנן -> גננות, בית וכו'. "24 שעות" -> כל היום.
שמור את הביטויים האלה כביטויים מנחים. אחר כך, כשמישהו יחפש "מתכנת שעובד כל היום באזור רמת גן", תוכל לפצל את הדרישה:
[תכנות] + [כל היום] + [רמת גן], ולזה תהיה לך תשובה.
ככל שיהיו יותר תגיות רלוונטיות, כך התוצאה תדורג יותר גבוה. אתה יכול ללכת יותר רחוק ולתת אחוז רלוונטיות לכל תגית לגבי העמוד (נגיד שהנושא תכנות מופיע הכי הרבה, הוא יקבל 0.6, כאשר כל היום יקבל 0.2 ורמת גן 0.2. ככה מי שיחפש תכנות ברמת גן יקבל 0.8 רלוונטיות לעומת מי שיחפש "אדם שעובד כל היום ברמת גן" ויקבל 0.4, כי זה פשוט פחות רלוונטי לעמוד ששמרת).

בהצלחה

Erez | TrustMedia.co.il 10-06-11 11:22

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 807174)
הרעיון שלי הוא כזה. הרי אתה יודע שהתחום הוא, נגיד, עבודה.
ביטויים שקשורים בעבודה יכולים להיות כמובן "חיפוש","משרה" ו"בוס" - אבל גם "מתכנת","גנן" ו"רואה חשבון". אפילו "טכנולוגיה" או "24 שעות ביממה" אלו ביטויים עם משמעות.

המלצה שלי: צור מערכים עם שיוך לתגיות. לדוגמא, צור את הרצף הבא: מתכנת -> טכנולוגיה, תכנות. גנן -> גננות, בית וכו'. "24 שעות" -> כל היום.
שמור את הביטויים האלה כביטויים מנחים. אחר כך, כשמישהו יחפש "מתכנת שעובד כל היום באזור רמת גן", תוכל לפצל את הדרישה:
[תכנות] + [כל היום] + [רמת גן], ולזה תהיה לך תשובה.
ככל שיהיו יותר תגיות רלוונטיות, כך התוצאה תדורג יותר גבוה. אתה יכול ללכת יותר רחוק ולתת אחוז רלוונטיות לכל תגית לגבי העמוד (נגיד שהנושא תכנות מופיע הכי הרבה, הוא יקבל 0.6, כאשר כל היום יקבל 0.2 ורמת גן 0.2. ככה מי שיחפש תכנות ברמת גן יקבל 0.8 רלוונטיות לעומת מי שיחפש "אדם שעובד כל היום ברמת גן" ויקבל 0.4, כי זה פשוט פחות רלוונטי לעמוד ששמרת).

בהצלחה

תראה את ההודעה שלי למעלה, יש דבר כזה מובנה בmysql, אתה מגדיר לו את השדות ואת הטקסט והוא עושה חיפוש, ומחזיר לי רלוונטיות של התוצאות חיפוש עבור כל תוצאה שאני יכול למיין לפיו את התוצאות.
והפתרון שלך גם מצריך המון עבודה למצוא מילים נרדפות, לארגן מילות מפתח. והבעיה בו שתמיד יהיה איזה מילה נרדפת שלא קיימת במאגר שלי או מילת מפתח שלא ידעתי עליה, אז זה לא ממש מושלם


כל הזמנים הם GMT +2. הזמן כעת הוא 23:48.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ