אינדוקס קבצי XML

user32

Well-known member
מנהל
אינדוקס קבצי XML

יש לי מערכת שאמורה לאפשר למשתמשים להעלאות מסמכים בפורמט XML (מסמכי אופן אופיס או WORD בפורמט XML). המערכת שלי מחלקת את המסמך לכמה תתי מסמכים לפי לוגיקה מסויימת ואמורה לשמור את הכל על שרת או DB. בסופו של דבר אני רוצה לאפשר למשתמשים לעשות חיפוש free text ולמצוא את כל המסמכים שמופיעים בהם מילה מסויימת לא משנה באיזה תאג בXML. השאלה: איך לשמור ולאנדקס את קבצי הXML? ניסיתי מוצרי קוד פתוח שמתיימרים להיות "XML Database" אבל כולם נכשלו בחיפוש החופשי שלקח דקות ארוכות גם כשמדובר במספר לא גדול של מידע (כמה מגה בייטים ספורים). ניכר בעליל שהם לא ממש מאנדקסים את הטקסט אלא בזמן חיפוש פשוט טוענים כל קובץ לDOM ועושים חיפוש xPath שכמובן לוקח הרבה זמן בחיפוש חופשי. תוכנות ייעודיות כמו CMS למיניהן (ניהול תוכן) הן יקרות מה שלא יתאפשר לי מבחינת המחיר. האפשרות שעוד לא ניסיתי זה שמירה בתוך בסיס נתונים רלציוני כמו אורקל או SQL Server. אני יודע שיש תמיכה בXML השאלה אם זה יתאים לצרכים שלי: שמירה של מספר גדול של מסמכים וביצוע חיפושים?
 

arnonrgo

New member
RDBMS וXML

RDBMSים מודרנים אכן מכניסים תמיכה בנתונים מובנים למחצה SQL 2005 שאיתו יש לי נסיון יש גם אפשרות לאנדקס XML ולבצע שאילתות. מנסיוני זה עבד בסדר - אם כי לא ניסיתי מתאר שהוא XMLי במהותו (כלומר אצלנו הXML הוא מידע מישני ומשלים למידע הרלאציוני) יש לIBM מבחן (benchmark) שהם פיתוח לנושא של ביצועי XML - אפשר גם להוריד את המבחן ולראות את התוצאות של DB2 9 ב http://tpox.sourceforge.net/ ארנון
 

dotandvir

New member
לא סיפקת מספיק מידע בקשר לבעיה

אם אתה רק מנסה לחפש מילה בתוך XML אני לא מבין בשביל מה אתה צריך מסד נתונים בכלל - כל כלי חיפוש בטקסט יעזור לך ואת השבירה לתתי מסמכים ממילא אתה עושה רק פעם אחת בזמן העלאת המסמך. מסדי נתונים מסוג XML מאנדקסים בד"כ עפ"י סכימה ולא סתם בחלל האוויר - בלי סכימה מוגדרת החיפוש יהיה הרבה יותר איטי. גם האופן של החיפש מתאים ל- XPATH או ל- XQUERY אבל לא תיארת בכלל איך נראית השאילתא שלך כך שקשה להגיד איפה הבעיה. מניסיון שהיה לי בעבר עם מסד נתונים מבוסס XML ומסחרי XHIVE - החיפוש היה מאוד מהיר אבל הוא גם היה יקר. יש כל מיני הרחבות של XML למסדי נתונים רלציוניים וכמובן שתמיד יש את ה- CLOB הישן והטוב. דותן
 

user32

Well-known member
מנהל
הנה ההסבר המשלים

לXML יש סכימה ואני מעוניין לאפשר שני סוגי חיפוש: הראשון הוא חיפוש קלאסי של xPath או xQuery כפי שתיארת. למשל לשלוף את כל הקבצי הXML בעלי תאג date בעל ערך מסויים וכו'. בנוסף, לכל XML יש תאג שמכיל מסמך בפורמט של אופן אופיס. מסמך זה הוא טקסט שמזכיר קצת HTML עם פונטים, צבעים, תמונות וכו'. אני מעוניין לאפשר חיפוש טקסט חופשי במסמך (שכאמור נמצא כענף בXML). תוצאות החיפוש יחזירו לי את התאג בו נמצאה המילה או מחרוזת החיפוש. אם אני משתמש בכלי חיפוש של טקסט רגילים אני לא יכול לבצע חיפושי xPath ולא יכול לשלוף XmlElement בחיפוש. אם אני משתמש בDOM או פרסר אחר אני צריך לפתוח קובץ קובץ ולחפש בו מה שלוקח הרבה מאוד זמן.
 

dotandvir

New member
עכשיו מובן יותר

אולי תנסה לשלב בין גישות - את המסמכים בפורמט אופן אופיס (לא ציינת אבל אני מניח שמדובר ב- CDATA בתוך ה-XML כדי למנוע בלבול עם התג הפותח של המסמך) תאנדקס עם כלי שמתאים לנושא כמו lucene ובתוך קובץ ה-XML תשאיר מצביע לקובץ אופן אופיס שיכיל את הטקסט הזה. באופן דומה בתוך הקובץ של האופן אופיס תכניס הערה עם המסלול לקובץ ה-XML שפונה אליו וככה תרוויח משני העולמות. נ"ב לא ציינת באיזה XML DB אתה משתמש אבל יכול להיות שאתה יכול לכתוב אינדקסר של עצמך עבור שדות מסויימים ופשוט להפעיל את LUCENE תחתיו. דותן
 
למעלה