מה זה אפאצ'י סולר? ולמה כדאי להשתמש בזה

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

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

אתה זקוק למכונה הגונה (או פשוט להשתמש במופע AWS) עם זיכרון RAM של 8GB ומעלה. תוכל למצוא את סול בכתובת //lucene.apache.org/solr. אתה זקוק גם לגירסת 8. מכונה וירטואלית של Java. Unzip / untar Solr לספריה, וודא ש- JAVA_HOME מוגדר ושהבינארי של Java נמצא בדרכך. שנה לספרייה שבה Solr נמצא והקלד bin/solr start -e cloud -noprompt. זה מתחיל אשכול של שני צומת במחשב הנייד שלך עם אוסף לדוגמה שנקרא gettingstarted כבר נטען.

הפעלה רגילה תהיה רק bin/solr start -cהפעלת סולר במצב "ענן". אבל אם אתה הולך לבעוט בצמיגים אתה באמת רוצה לראות התקנת רב-צומת גם אם זה במחשב הנייד שלך. Solr Cloud הוא הדרך בה אתה רוצה להריץ התקנת Solr מודרנית. אם תתחיל ללא -cזה תתחיל במצב מורשת. זה דבר רע.

מסמכים ואוספים

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

אדם {

 "Id": "1333425",

 "First_name": "Francis",

 "Name_name": "J.",

 "Last_name": "Underwood",

 "כתובת": ["1600 Pennsylvania Ave NW, Washington, DC 20500", "1609 Far St. NW, Washington, DC, 20036"],

 "טלפון": ["202-456-1111", "202-456-1414"]

}

רסיסים, העתקים וליבות

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

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

יצירת אוסף

למרות שיש ממשקי HTTP דומים ל- REST, אתה יכול פשוט להשתמש בפקודה bin/solr(או bin/solr.cmd) כדי ליצור ולשלוט באוספים. בוא נשתמש בנושא לא שנוי במחלוקת ונמצא מערך נתונים ציבורי. קח עותק של נתוני עלויות הבריאות מ- Data.gov. למען הפשטות תפסו אותו כ- CSV. בהנחה שהפעלת את Solr לפי ההוראות, השתמש בפקודה זו כדי ליצור אוסף בשם ipps:

bin / solr create_collection -d basic_configs -c ipps

לאחר מכן בואו נטען נתונים באוסף. ראשית עלינו לתקן כמה דברים בקובץ ה- CSV. הסר את כל $התווים. כמו כן, בשורה העליונה של שמות השדות, שנה את השדות מרווחים לקווים תחתונים. תן לזה לקרוא כך:

DRG_Definition, Provider_Id, Provider_Name, Provider_Street_Address, Provider_City, Provider_State, Provider_Zip_Code, Hospital_Referral_Region_Description, Total_Disarges, Average_Covered_Ccharges, Average_Total_Payments, Average_Medicare_P

ישנם כלים חזקים יותר ל- ETL ממה שמובנה ב- Solr (כמו זה המובנה במוצר שהחברה שלי מוכרת), אך בסך הכל זה לא היה פתרון מסובך!

לפני שאנחנו טוענים נתונים כלשהם, עלינו ליצור "סכמה" הדומה למה שיש לך במסד נתונים יחסי. אנו יכולים לעשות זאת באמצעות curlהפקודה ב- Linux / Mac או שתוכל להשתמש בכלי GUI כמו Postman.

תלתל -X POST -H 'סוג תוכן: יישום / json' - נתונים בינאריים '{

 "הוסף שדה":{

     "שם": "DRG_Definition",

     "סוג": "טקסט_כללי",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "ספק_איד",

     "סוג": "פלונג",

     "DocValues": נכון,

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "שם ספק",

     "סוג": "טקסט_כללי",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "כתובת_ספק_כתובת",

     "סוג": "מחרוזת",

     "באינדקס": שקר,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "Provider_City",

     "סוג": "מחרוזת",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "Provider_State",

     "סוג": "מחרוזת",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "Provider_Zip_Code",

     "סוג": "מחרוזת",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "תיאור בית חולים_הפניה_אזור",

     "סוג": "טקסט_כללי",

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "Name": "Total_Discharges",

     "סוג": "פינט",

     "DocValues": נכון,

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "ממוצע_טעינה",

     "סוג": "pdouble",

     "DocValues": נכון,

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "ממוצע_סכומים_תשלומים",

     "סוג": "pdouble",

     "DocValues": נכון,

     "באינדקס": נכון,

     "מאוחסן": נכון

  },

 "הוסף שדה":{

     "שם": "ממוצע_תרופות_תשלומים",

     "סוג": "pdouble",

     "DocValues": נכון,

     "באינדקס": נכון,

     "מאוחסן": נכון

  }

} '// localhost: 8983 / solr / ipps / schema

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

Now that we’ve got a schema we can “post” the data into Solr. There are many routes to do this. You could use curl or Postman, but Solr includes a command line tool, bin/post, which will be available out of the box on Linux and MacOS.

bin/post -c ipps -params "rowid=id" -type "text/csv" /home/acoliver/Downloads/Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG__-_FY2011.csv

On Windows:

java -Dtype=text/csv -Dc=ipps -Dparams="rowid=id" -jar example\exampledocs\post.jar \Users\acoliver\Downloads\Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG__-_FY2011.csv

W00t you have data!

Querying your data

There are language bindings for Solr that you can use for Java or Python, or if you’re more of a power developer you can use the one for PHP. Or you could just use curl or Postman or your browser.

Paste this into an address bar:

//localhost:8983/solr/ipps/select?indent=on&q=*:*&wt=json

This URL is a simple query that returns the 10 most relevant results. You can change the pagination and find out more about Solr’s Solr’s query language and even alternative query parsers in the reference guide. If you want to see the same thing in XML you can configure that.

Maybe you want to do something a bit more advanced. Below finds procedures in the town I live in:

//localhost:8983/solr/ipps/select?indent=on&q=Provider_State:NC%20AND%20Hospital_Referral_Region_Description:%22*Durham%22&wt=json

You can go much further and do more summaries and calculations and fuzzy matches.

Solr administration

Some of you are like “Good gosh, the command line scares me!” So that’s fine, Solr has a GUI. Got to //localhost:8983/solr and see this beauty:

If you select your collection on the side, you can even go to a screen that will let you fill in query parameters:

If that screen gives you a headache, you can just go to //localhost:8983/solr/ipps/browse.

We’ve done simple text queries. You can also do ranges and spatial searches. If the “relevance” sorting isn’t working for you, you can do more advanced expressions and have Solr return things “as they are found” much like an RDBMS does it. You can sort on various fields and filter by categories. You can even have it “learn to rank”—a machine learning capability that lets Solr “learn” what users think is the most relevant result. We’ve really only scratched the surface.

Why Solr?

So clearly you might choose to use Solr if you need a search engine. However, it is also a redundant, distributed document database that offers SQL (out of the box) for those who want to connect tools like Tableau. It is extensible in Java (and other JVM languages), and yet with the REST-like interface you can easily speak JSON or XML to it.

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

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

בלי קשר, רק זכרו שחברים אינם נותנים לחברים לבצע bla like '%stuff' שאילתות SQL .