מדריך Solr בג 'אווה עם Apache SolrJ

1. סקירה כללית

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

במאמר זה, אנו הולכים לחקור כיצד לתקשר עם שרת Apache Solr באמצעות SolrJ.

2. התקנה

על מנת להתקין שרת Solr במחשב שלך, עיין במדריך Solr QuickStart.

תהליך ההתקנה פשוט - פשוט הורידו את חבילת ה- zip / tar, חילצו את התוכן והפעילו את השרת משורת הפקודה. למאמר זה ניצור שרת Solr עם ליבה הנקראת 'bigboxstore':

bin / solr bin start / solr create -c 'bigboxstore'

כברירת מחדל, Solr מקשיבה ליציאה 8983 לשאילתות HTTP נכנסות. אתה יכול לוודא שהוא הושק בהצלחה על ידי פתיחת ה- // localhost: 8983 / solr / # / bigboxstore כתובת אתר בדפדפן ותצפית על לוח המחוונים של Solr.

3. תצורת Maven

עכשיו, כשיש לנו את שרת Solr, בוא נקפוץ ישר ללקוח Java של SolrJ. כדי להשתמש ב- SolrJ בפרויקט שלך, תצטרך להכריז על התלות הבאה שלך ב- Maven pom.xml קוֹבֶץ:

 org.apache.solr solr-solrj 6.4.0 

אתה תמיד יכול למצוא את הגרסה האחרונה המאוחסנת על ידי Maven Central.

4. Apache SolrJ Java API

בואו נפתח את לקוח SolrJ על ידי חיבור לשרת Solr שלנו:

מחרוזת urlString = "// localhost: 8983 / solr / bigboxstore"; HttpSolrClient solr = HttpSolrClient.Builder חדש (urlString) .build (); solr.setParser (XMLResponseParser חדש ());

הערה: SolrJ משתמש בפורמט בינארי ולא ב- XML, כפורמט התגובה המוגדר כברירת מחדל. לצורך תאימות עם Solr, נדרש להפעיל במפורש setParser () ל- XML ​​כפי שמוצג לעיל. פרטים נוספים על כך ניתן למצוא כאן.

4.1. יצירת מסמכים לאינדקס

בואו נגדיר את הנתונים לאינדקס באמצעות a SolrInputDocument והוסף אותו לאינדקס שלנו באמצעות לְהוֹסִיף() שיטה:

מסמך SolrInputDocument = SolrInputDocument חדש (); document.addField ("id", "123456"); document.addField ("שם", "מדיח כלים קנמור"); document.addField ("מחיר", "599.99"); solr.add (מסמך); solr.commit ();

הערה: כל פעולה שמשנה את מסד הנתונים Solr מחייבת את הפעולה אחריה לְבַצֵעַ().

4.2. אינדקס עם שעועית

ניתן גם להוסיף לאינדקס מסמכי Solr באמצעות שעועית. בואו נגדיר ProductBean שתכונותיו מסומנות עם @שדה:

ProductBean בכיתה ציבורית {מזהה מחרוזת; שם מחרוזת; מחיר מחרוזת; @Field ("id") מוגן ריק setId (מזהה מחרוזת) {this.id = id; } @Field ("שם") מוגן ריק setName (שם מחרוזת) {this.name = שם; } @Field ("price") מוגן הריק setPrice (מחיר מחרוזת) {this.price = price; } // getters ובנאי הושמט למרחב}

לאחר מכן, בואו נוסיף את השעועית לאינדקס שלנו:

solrClient.addBean (ProductBean חדש ("888", "Apple iPhone 6s", "299.99")); solrClient.commit ();

4.3. שאילתת מסמכים שנוספו לאינדקס לפי שדה ומזהה

בוא נוודא שהמסמך שלנו נוסף באמצעות SolrQuery לשאילתת שרת Solr שלנו.

ה QueryResponse מהשרת יכיל רשימה של SolrDocument אובייקטים התואמים לכל שאילתה עם הפורמט שדה: ערך. בדוגמה זו אנו מבצעים שאילתה לפי מחיר:

שאילתת SolrQuery = SolrQuery חדשה (); query.set ("q", "מחיר: 599.99"); תגובה QueryResponse = solr.query (שאילתה); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 1); עבור (SolrDocument doc: docList) {assertEquals ((String) doc.getFieldValue ("id"), "123456"); assertEquals ((Double) doc.getFieldValue ("price"), (Double) 599.99); }

אפשרות פשוטה יותר היא לשאול לפי תְעוּדַת זֶהוּת באמצעות getById (). שיחזיר רק מסמך אחד אם תמצא התאמה:

SolrDocument doc = solr.getById ("123456"); assertEquals ((String) doc.getFieldValue ("שם"), "מדיח כלים קנמור"); assertEquals ((Double) doc.getFieldValue ("price"), (Double) 599.99);

4.4. מחיקת מסמכים

כאשר אנו רוצים להסיר מסמך מהאינדקס, נוכל להשתמש בו deleteById () ואמת שהוא הוסר:

solr.deleteById ("123456"); solr.commit (); שאילתת SolrQuery = SolrQuery חדשה (); query.set ("q", "id: 123456"); תגובה QueryResponse = solr.query (שאילתה); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 0);

יש לנו גם אפשרות deleteByQuery ()אז בואו ננסה למחוק כל מסמך עם שם ספציפי:

solr.deleteByQuery ("שם: מדיח כלים קנמור"); solr.commit (); שאילתת SolrQuery = SolrQuery חדשה (); query.set ("q", "id: 123456"); תגובה QueryResponse = solr.query (שאילתה); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 0);

5. מסקנה

במאמר מהיר זה, ראינו כיצד להשתמש ב- SolrJ Java API לביצוע כמה מהאינטראקציות הנפוצות עם מנוע החיפוש Apache Solr בטקסט מלא.

אתה יכול לבדוק את הדוגמאות המפורטות במאמר זה ב- GitHub.