Programovanie

Čo je Apache Solr? A prečo by ste to mali používať

Apache Solr je subprojektom Apache Lucene, čo je technológia indexovania, ktorá stojí za naposledy vytvorenou technológiou vyhľadávania a indexovania. Solr je jadrom vyhľadávača, ale je to oveľa viac. Je to NoSQL databáza s podporou transakcií. Jedná sa o databázu dokumentov, ktorá ponúka podporu SQL a vykonáva ju distribuovaným spôsobom.

Znie to zaujímavo? Pripojte sa ku mne pre bližší pohľad. (Úplné zverejnenie: Pracujem pre spoločnosť Lucidworks, ktorá zamestnáva mnohých kľúčových prispievateľov do projektu Solr.)

Potrebujete slušný počítač (alebo stačí použiť inštanciu AWS) s ideálne 8 GB alebo viac RAM. Solr nájdete na //lucene.apache.org/solr. Potrebujete tiež Java Virtual Machine verzie 8. Rozbaľte / rozbaľte Solr do adresára, uistite sa, že je nastavený JAVA_HOME a či je vo vašej ceste java binárny súbor. Prejdite do adresára, v ktorom je Solr a zadajte bin / solr start -e cloud -noprompt. Týmto sa na vašom notebooku spustí klaster s dvoma uzlami, pričom už je načítaná vzorová kolekcia s názvom gettingstarted.

Normálny startup by proste bol bin / solr štart -c spustíte Solr v „cloudovom“ režime. Ak sa však chystáte kopnúť do pneumatík, skutočne chcete vidieť inštaláciu viacerých uzlov, aj keď je to na vašom vlastnom notebooku. Solr Cloud je spôsob, akým chcete spustiť modernú inštaláciu Solr. Ak začnete bez -c začnete v starom režime. To je zlá vec.

Dokumenty a zbierky

Solr je štruktúrovaná databáza dokumentov. Entity ako „Osoba“ sa skladajú z polí ako meno, adresa a e-mail. Tieto dokumenty sú uložené v zbierkach. Zbierky sú najbližšie k analógovým tabuľkám v relačnej databáze. Avšak na rozdiel od relačnej databázy môže „Osoba“ úplne obsahovať entitu, čo znamená, že ak má osoba viac adries, tieto adresy môžu byť uložené v jednom dokumente „Osoba“. V relačnej databáze by ste potrebovali samostatnú tabuľku adries.

Osoba {

"Id": "1333425",

„First_name“: „Francis“,

„Middle_name“: „J.“,

„Last_name“: „Underwood“,

„Address“: [„1600 Pennsylvania Ave NW, Washington, DC 20500“, „1609 Far St. NW, Washington, D.C., 20036“],

„Phone“: [„202-456-1111“, „202-456-1414“]

}

Črepy, repliky a jadrá

Na rozdiel od väčšiny relačných databáz sú dáta automaticky rozdelené a replikované cez Solr Cloud. To znamená, že keď zapisujete dokument do správne nakonfigurovanej kolekcie, distribuuje sa do jednej z inštancií Solr. To je „zlomok“. Robí sa to kvôli zlepšeniu výkonu čítania. Každý dokument je tiež z dôvodu nadbytočnosti replikovaný alebo kopírovaný aspoň raz (konfigurovateľne). To znamená, že môžete stratiť inštanciu Solr a trpieť iba zníženým výkonom v klastri, ale bez straty údajov.

Klaster je skupina „uzlov“, čo sú inštancie Java Virtual Machine (JVM), na ktorých beží server Solr. Uzol môže obsahovať viac „jadier“. Každé jadro je replikou logického „zlomku“. Jadrá sa všeobecne identifikujú podľa zbierky, čísla zlomku a čísla repliky, ktoré sú spojené ako reťazec.

Vytváranie zbierky

Aj keď existujú rozhrania HTTP podobné REST, môžete jednoducho použiť bin / solr (alebo bin / solr.cmd) príkaz na vytváranie a kontrolu zbierok. Poďme použiť kontroverznú tému a nájdime verejný súbor údajov. Získajte kópiu údajov o nákladoch na zdravotnú starostlivosť z lokality Data.gov. Pre jednoduchosť to vezmite ako CSV. Za predpokladu, že ste spustili Solr podľa pokynov, použite tento príkaz na vytvorenie kolekcie s názvom ipps:

bin / solr create_collection -d basic_configs -c ipps

Ďalej načítame údaje do zbierky. Najskôr musíme v súbore CSV opraviť niekoľko vecí. Odstráňte všetky $ znakov. V hornom riadku názvov polí tiež zmeňte polia z medzier na podčiarkovníky. Nechajte to čítať takto:

DRG_Definition, Provider_Id, Provider_Name, Provider_Street_Address, Provider_City, Provider_State, Provider_Zip_Code, Hospital_Referral_Region_Description, Total_Discharges, Average_Covered_Charges, Average_Total_Payments, Average_Medicare_Payments

Pre ETL existujú výkonnejšie nástroje ako tie, ktoré sú zabudované do systému Solr (napríklad ten, ktorý je zabudovaný do produktu, ktorý predáva moja spoločnosť), ale celkovo to nebola zložitá oprava!

Predtým, ako načítame akékoľvek údaje, musíme vytvoriť „schému“, ktorá je podobná schéme, ktorú máte v relačnej databáze. Môžeme to urobiť pomocou zvlnenie príkaz na systéme Linux / Mac alebo môžete použiť nástroj grafického používateľského rozhrania, ako je Postman.

curl -X POST -H „Content-type: application / json“ —data-binary “{

„Pridať pole“: {

“Name”: ”DRG_Definition”,

“Type”: ”text_general”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_Id“,

„Type“: „plong“,

„DocValues“: true,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_Name“,

“Type”: ”text_general”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_Street_Address“,

“Type”: “string”,

„Indexed“: false,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_City“,

“Type”: “string”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_State“,

“Type”: “string”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Provider_Zip_Code“,

“Type”: “string”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

“Name”: ”Hospital_Referral_Region_Description”,

“Type”: ”text_general”,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

“Name”: ”Total_Discharges”,

„Type“: „pinta“,

„DocValues“: true,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Average_Covered_Charges“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Average_Total_Payments“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexované“: pravda,

„Uložené“: pravda

  },

„Pridať pole“: {

„Name“: „Average_Medicare_Payments“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexované“: pravda,

„Uložené“: pravda

  }

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

Jedná sa o názvy polí, typy polí a informácie o tom, či pole indexovať a uložiť. Viac informácií o typoch údajov a celkovej schéme spoločnosti Solr sa dozviete v referenčnej príručke.

Teraz, keď máme schému, môžeme údaje „zverejniť“ do služby Solr. Existuje veľa spôsobov, ako to dosiahnuť. Môžete použiť curl alebo Postman, ale Solr obsahuje nástroj príkazového riadku, bin / post, ktorý bude k dispozícii po vybalení z krabice v systémoch Linux a 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.cs

V systéme Windows:

java -Dtype = text / csv -Dc = ipps -Dparams = "rowid = id" -jar príklad \ exampledocs \ post.jar \ Users \ acoliver \ Downloads \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-related_ groups__v_skupiny__v

W00t máte dáta!

Dotaz na vaše údaje

Pre Solr existujú jazykové väzby, ktoré môžete použiť pre Java alebo Python, alebo ak ste skôr vývojársky program, môžete použiť jazykové väzby pre PHP. Alebo stačí použiť curl alebo Postman alebo prehliadač.

Prilepte to do panela s adresou:

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

Táto adresa URL je jednoduchý dopyt, ktorý vráti 10 najrelevantnejších výsledkov. Môžete zmeniť stránkovanie a v referenčnej príručke nájdete viac informácií o jazyku Solr’s Solr’s query language, alebo dokonca alternatívnych analyzátoroch dotazov. Ak chcete vidieť to isté v XML, môžete si to nakonfigurovať.

Možno chcete urobiť niečo o niečo pokročilejšie. Ďalej uvádzam postupy v meste, v ktorom žijem:

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

Môžete ísť oveľa ďalej a robiť ďalšie súhrny a výpočty a fuzzy zhody.

Solr administrácia

Niektorí z vás sú ako „Dobrý bože, príkazový riadok ma desí!“ Takže to je v poriadku, Solr má grafické používateľské rozhranie. Musím // localhost: 8983 / solr a vidieť túto krásu:

Ak vyberiete svoju zbierku na boku, môžete dokonca prejsť na obrazovku, ktorá vám umožní vyplniť parametre dotazu:

Ak vás táto obrazovka bolí, môžete jednoducho prejsť na // localhost: 8983 / solr / ipps / browse.

Urobili sme jednoduché textové dotazy. Môžete tiež robiť rozsahy a priestorové vyhľadávania. Ak vám triedenie podľa relevancie nefunguje, môžete urobiť pokročilejšie výrazy a nechať Solr vrátiť veci „tak, ako sa nachádzajú“, podobne ako to robí RDBMS. Môžete triediť podľa rôznych polí a filtrovať podľa kategórií. Môžete ich dokonca mať „naučené hodnotiť“ - schopnosť strojového učenia, ktorá umožňuje spoločnosti Solr „naučiť sa“ to, čo si používatelia myslia za najrelevantnejší výsledok. Naozaj sme iba poškriabali povrch.

Prečo Solr?

Je zrejmé, že by ste sa mohli rozhodnúť použiť Solr, ak potrebujete vyhľadávací nástroj. Je to však tiež nadbytočná distribuovaná databáza dokumentov, ktorá ponúka SQL (po vybalení z krabice) pre tých, ktorí si chcú pripojiť nástroje ako Tableau. Je rozšíriteľný v jazyku Java (a ďalších jazykoch JVM), a napriek tomu s ním môžete prostredníctvom rozhrania REST ľahko hovoriť vo formáte JSON alebo XML.

Solr nemusí byť vašou najlepšou voľbou, ak máte jednoduché údaje, ktoré hľadáte pomocou kľúča a zväčša zapisujete. Solr má príliš veľa inštalatérskych prác na to, aby robil väčšie veci, aby bol na to rovnako efektívny ako sklad kľúčov.

Solr je jasná voľba, ak je vaše vyhľadávanie veľmi zamerané na text. Existujú však aj ďalšie, nie celkom zrejmé prípady, keď by to mohla byť dobrá voľba, ako napríklad priestorové vyhľadávanie všetkých ľudí, ktorých mobilné telefóny ste hackli, aby zistili ich polohu. Len hovorím, že aj vy, pán Putin, by ste si možno chceli zvoliť Solra.

Bez ohľadu na to, nezabudnite, že priatelia nenechajú priateľov robiť SQL bla ako '% vecí' dotazy.

$config[zx-auto] not found$config[zx-overlay] not found