שאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib)
-
נתקלתי בבעיה כאשר אני משתמש בחיפוש רגקס בספריית lucene ב .contrib.regex שזה רק מצליח לחפש מילה אחת אבל לא הרבה מילים.
אשמח לקבל כל עזרה בנושא. -
כשאני מזין קלט רגקס של מילה אחת כגון "אבר.ם" לדוגמא אז הוא מוצא לי את "אברהם"
אבל כשאני מזין קלט של שני מילים כגון "בר.שית ב.א" הוא לא מחזיר לי כלום
יש לציין שבעיה זו היא בספרייה של contrib ובחיפוש רגקס בלבד אבל בחיפו ש הרגיל של lucen לא נתקלתי בשום בעיה עם חיפוש כמות מילים.
אפשר לעשות כל מיני אילתורים אבל זה מוריד מהיעילות של הפונקציה. -
ממה שאני מבין, גם בחיפוש הרגיל של lucene אמורים לפצל את המילים ולהשתמש בPhraseQuery.
וזה הגיוני, כי כל הרעיון הוא שהוא ישבור את הראש לתת את הציון הטוב ביותר לסדר הנכון וכולי (ומהסיבה הזו אני תוהה אם הוא טוב לעברית).
אז אם ככה בRegexQuery מאוד ייתכן שאי אפשר לשים יותר ממילה, כי ביטוי שמכיל רווח באמת לא קיים באינדקס שמאנדקס רק מילים (בדומה לאינדקס שרציתי שתעשה ידנית).
אני כמובן לא בטוח בזה, לא רק בגלל שאני לא מכיר את lucene אלא כי זה ספריה כמעט בלי תיעוד, והיא נחשבת מקרה קצה אפילו בlucene עצמה. ראיתי כמה שמציינים שהיא בכל מקרה עם ביצועים גרועים במקרה הטוב, ביחס לביטוי רגיל (וזה מאוד הגיוני בהתחשב איך שעובד אינדקס). -
@dovid כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
מהסיבה הזו אני תוהה אם הוא טוב לעברית
אכן הוא לא היה מושלם אבל עשה עבודה טובה מספיק שעם קצת התאמות הגעתי למה שרציתי. אבל לא בדקתי לעומק מה קורה במקרה של מה שנקרא "חיפוש פתוח" ייתכן מאוד שהוא מפשל עם העברית.
@dovid כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
ממה שאני מבין, גם בחיפוש הרגיל של lucene אמורים לפצל את המילים ולהשתמש בPhraseQuery.
כוונתך לפקודה "queryParser"?
@dovid כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
ראיתי כמה שמציינים שהיא בכל מקרה עם ביצועים גרועים במקרה הטוב, ביחס לביטוי רגיל (וזה מאוד הגיוני בהתחשב איך שעובד אינדקס).
החכמתני - תודה.
לכאורה במקרה שלי זה לא אמור להפריע כי אני לא מחפש כזו צורה של חיפוש רק חיפוש מדוייק על פי קריטוריונים מדוייקים של המחפש.מה שחשבתי אולי לעשות זה חיפוש של כל מילה בנפרד ואז הצלבה של התוצאות השאלה כמה פרקטי הדבר כשיש אלפי תוצאות.
יש ספרייה מיועדת עבור הצלבות של רשימות באופן מהיר? דיברנו על זה קצת בעבר האם להתמש עם הרעיונות שהועלו שמה (ומה הכי מתאים למקרה זה? או עם משהו אחר.תודה
-
@pcinfogmach כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
כוונתך לפקודה "queryParser"?
לא.
לזה https://lucenenet.apache.org/docs/3.0.3/d5/d58/class_lucene_1_1_net_1_1_search_1_1_phrase_query.html
אני באמת לא בטוח במה שכתבתי, כי אחרי הכל אני בחיים לא השתמשתי עם lucene ולא הבנתי את הפילוסופיה שלה כלל.הצלבה של שימות זה מה שמישהו בכל מקרה צריך לעשות, אבל אתה עושה זאת במקום lucene זה בעצם אומר שאתה מוותר על היכולות שלה ומקבל הרבה פחות ביצועים (כי מעבר על התוצאות איטי בהרבה ממעבר על האינדקס, ואתה תצטרך את כלל התוצאות ולא N TOP).
-
@dovid כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
הצלבה של שימות זה מה שמישהו בכל מקרה צריך לעשות, אבל אתה עושה זאת במקום lucene זה בעצם אומר שאתה מוותר על היכולות שלה ומקבל הרבה פחות ביצועים (כי מעבר על התוצאות איטי בהרבה ממעבר על האינדקס, ואתה תצטרך את כלל התוצאות ולא N TOP).
שאלה: בבניית אינדקס כמו שרצינו בהתחלה עם sqlite ודומיו אין את החסרון הזה כי לכאורה גם שם צריך להצליב מידע בתוצאות כאשר יש חיפוש של כמה מילים?
ועוד שאלה אם בכל אופן בלית ברירה אלך על הצלבה באיזו ספרייה מומלץ להשתמש?
-
@pcinfogmach כתב בשאלה בc#: מישהו מכיר את lucene.net נתקע לי משהו בחיפוש רגקס (contib):
שאלה: בבניית אינדקס כמו שרצינו בהתחלה עם sqlite ודומיו אין את החסרון הזה כי לכאורה גם שם צריך להצליב מידע בתוצאות כאשר יש חיפוש של כמה מילים?
זה לא חיסרון, מישהו בכל מקרה צריך להצליב והכל בסדר, אבל במקרה שאתה מבצע את ההצלבה זה זול בהרבה כי אתה לא מתעסק עם תוצאות אלא עם האינדקס עצמו. אתה גם מיידית יכול להתחיל עם המילה הכי ארוכה ועוד כל מיני שיפורים.
בשביל ספריה להצלבה, C# היא מצוייינת. השאלה היא בעיקר מה המקורות, אם מדובר בתוכן שכבר נמצא ביזכרון גם ההצלבה הכי גרועה תעבוד מאוד מהר, אבל אם בlucene מדובר רק ברפרנסים שטעינת המידע על המיקום למשל גוררת קריאה מדיסק, זה עלול להיות גרוע.