Programavimas

Kas yra „Apache Solr“? Ir kodėl turėtumėte jį naudoti

„Apache Solr“ yra „Apache Lucene“, kuris yra indeksavimo technologija, sukurta pagal naujausią sukurtą paieškos ir indeksavimo technologiją, paprojektas. „Solr“ yra širdies paieškos sistema, tačiau tai yra kur kas daugiau. Tai „NoSQL“ duomenų bazė, palaikanti operacijas. Tai dokumentų duomenų bazė, siūlanti SQL palaikymą ir vykdanti ją paskirstytu būdu.

Skamba įdomiai? Prisijunkite prie manęs, kad pamatytumėte arčiau. (Visiškas atskleidimas: Aš dirbu „Lucidworks“, kuriame dirba daug pagrindinių „Solr“ projekto dalyvių.)

Jums reikia padoraus įrenginio (arba tiesiog naudokite AWS egzempliorių), idealiu atveju - 8 GB ar daugiau RAM. „Solr“ rasite adresu //lucene.apache.org/solr. Jums taip pat reikalinga „Java“ virtualiosios mašinos versija 8. Išpakuokite / išjunkite „Solr“ į katalogą, įsitikinkite, kad nustatyta JAVA_HOME ir ar jūsų kelyje yra „Java“ dvejetainis failas. Pakeiskite į katalogą „Solr is“ ir įveskite bin / solr start -e debesis -neprompt. Tai paleidžia jūsų nešiojamojo kompiuterio dviejų mazgų grupę su mėginių rinkiniu, vadinamu „getstarted“.

Normalus paleidimas tiesiog būtų bin / solr start -c paleisti „Solr“ „debesies“ režimu. Bet jei ketinate spardyti padangas, tikrai norite, kad būtų įdiegti keli mazgai, net jei tai yra jūsų nešiojamas kompiuteris. „Solr Cloud“ yra būdas, kuriuo norite paleisti šiuolaikišką „Solr“ diegimą. Jei pradėsite be -c pradėsite nuo seno režimo. Tai yra blogas dalykas.

Dokumentai ir rinkiniai

„Solr“ yra dokumentų struktūrizuota duomenų bazė. Tokie subjektai kaip „Asmuo“ susideda iš tokių laukų kaip vardas, adresas ir el. Paštas. Tie dokumentai saugomi kolekcijose. Kolekcijos yra artimiausias reliacinės duomenų bazės lentelėms. Tačiau, skirtingai nei reliacinėje duomenų bazėje, „Asmuo“ gali visiškai sudaryti objektą, o jei asmuo turi kelis adresus, tuos adresus galima išsaugoti viename „Asmens“ dokumente. Reliacinėje duomenų bazėje jums reikės atskiros adresų lentelės.

Asmuo {

„Id“: „1333425“,

„First_name“: „Pranciškus“,

„Middle_name“: „J.“,

„Last_name“: „Underwood“,

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

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

}

Skaldos, kopijos ir šerdys

Skirtingai nei daugumoje reliacinių duomenų bazių, duomenys automatiškai suskaidomi ir atkartojami per „Solr Cloud“. Tai reiškia, kad kai rašote dokumentą į tinkamai sukonfigūruotą kolekciją, jis išplatinamas vienoje iš „Solr“ egzempliorių. Tai „skalda“. Tai daroma siekiant pagerinti skaitymo efektyvumą. Kiekvienas dokumentas taip pat bent kartą pakartojamas arba nukopijuojamas (konfigūruojamas), kad būtų atleista. Tai reiškia, kad galite prarasti „Solr“ egzempliorių ir patirti tik mažesnį našumą savo klasteryje, bet neprarasti duomenų.

Klasteris yra „mazgų“ rinkinys, kuris yra „Java Virtual Machine“ (JVM) egzemplioriai, kuriuose veikia „Solr“. Mazge gali būti keli „branduoliai“. Kiekviena šerdis yra logiškos „šukės“ kopija. Paprastai šerdys identifikuojamos pagal kolekciją, skeveldros numerį ir kopijos numerį, sujungtą kaip eilutę.

Kolekcijos kūrimas

Nors yra į REST panašių HTTP sąsajų, galite tiesiog naudoti šiukšliadėžė / solr (arba bin / solr.cmd) komanda sukurti ir valdyti kolekcijas. Panaudokime neginčytiną temą ir raskime viešą duomenų rinkinį. Paimkite sveikatos priežiūros išlaidų duomenų kopiją iš „Data.gov“. Paprastumo dėlei paimkite jį kaip CSV. Darant prielaidą, kad „Solr“ pradėjote kaip nurodyta, naudokite šią komandą, kad sukurtumėte kolekciją, vadinamą „ipps“:

bin / solr create_collection -d basic_configs -c ipps

Tada įkelkime duomenis į kolekciją. Pirmiausia turime pataisyti kelis dalykus CSV faile. Pašalinkite visus $ personažai. Be to, viršutinėje laukų pavadinimų eilutėje pakeiskite laukus iš tarpų į pabraukimus. Priverskite jį skaityti taip:

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_Medic

ETL yra galingesnių įrankių nei tie, kurie yra įmontuoti „Solr“ (pvz., Tie, kurie įmontuoti produkte, kurį parduoda mano įmonė), tačiau apskritai tai nebuvo sudėtingas sprendimas!

Prieš įkeliant bet kokius duomenis, reikia sukurti „schemą“, panašią į tą, kurią turite reliacinėje duomenų bazėje. Tai galime padaryti naudodami garbanoti komandą sistemoje „Linux / Mac“ arba galite naudoti GUI įrankį, pvz., „Postman“.

curl -X POST -H ‘Turinio tipas: programa / JSON’ - duomenų dvejetainis failas „{

„Add-field“: {

„Vardas“: „DRG_Definition“,

„Type“: „text_general“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Name“: „Provider_Id“,

„Type“: „plong“,

„DocValues“: tiesa,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Name“: „Provider_Name“,

„Type“: „text_general“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Name“: „Provider_Street_Address“,

„Type“: „string“,

„Indeksuota“: klaidinga,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Provider_City“,

„Type“: „string“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Provider_State“,

„Type“: „string“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Name“: „Provider_Zip_Code“,

„Type“: „string“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Hospital_Referral_Region_Description“,

„Type“: „text_general“,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Vardas“: „Iš viso_įmokos“,

„Type“: „pintas“,

„DocValues“: tiesa,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Vidutinis_dengtas_mokestis“,

„Type“: „pdouble“,

„DocValues“: tiesa,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Average_Total_Payments“,

„Type“: „pdouble“,

„DocValues“: tiesa,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  },

„Add-field“: {

„Pavadinimas“: „Vidutinės_medicinos_mokos“,

„Type“: „pdouble“,

„DocValues“: tiesa,

„Indeksuota“: tiesa,

„Saugomi“: tiesa

  }

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

Tai yra laukų pavadinimai, laukų tipai ir tai, ar lauką indeksuoti ir saugoti. Daugiau apie „Solr“ duomenų tipus ir bendrą schemą galite sužinoti informaciniame vadove.

Dabar, kai turime schemą, galime „paskelbti“ duomenis „Solr“. Yra daugybė būdų tai padaryti. Galite naudoti „curl“ arba „Postman“, tačiau „Solr“ yra komandinės eilutės įrankis „bin / post“, kuris bus prieinamas „Linux“ ir „MacOS“ dėžutėse.

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__-_FF2020.

„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-RS_20_group____grupos_grupė

W00t jūs turite duomenų!

Užklausa jūsų duomenims

Yra „Solr“ kalbos susiejimai, kuriuos galite naudoti „Java“ ar „Python“, arba, jei esate daugiau energijos kūrėjas, galite naudoti tą, skirtą PHP. Arba galite tiesiog naudoti „curl“ ar „Postman“ ar savo naršyklę.

Įklijuokite tai į adreso juostą:

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

Šis URL yra paprasta užklausa, pateikianti 10 svarbiausių rezultatų. Nuorodų vadove galite pakeisti puslapių skaičių ir sužinoti daugiau apie „Solr“ „Solr“ užklausų kalbą ir net alternatyvius užklausų analizatorius. Jei norite pamatyti tą patį dalyką XML, galite tai sukonfigūruoti.

Gal norite padaryti ką nors pažangesnio. Žemiau pateikiamos procedūros mieste, kuriame gyvenu:

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

Galite eiti daug toliau ir atlikti daugiau santraukų, skaičiavimų ir neryškių atitikmenų.

Solr administravimas

Kai kurie iš jūsų panašūs į „Gerai, Dieve, komandinė eilutė mane gąsdina!“ Taigi viskas gerai, „Solr“ turi GUI. Patekau į // localhost: 8983 / solr ir pamatėte šį grožį:

Jei pasirinksite kolekciją šone, netgi galite pereiti į ekraną, kuriame galėsite užpildyti užklausos parametrus:

Jei tas ekranas jums kelia galvos skausmą, galite tiesiog apsilankyti // localhost: 8983 / solr / ipps / naršyti.

Mes atlikome paprastas teksto užklausas. Taip pat galite atlikti diapazonus ir erdvines paieškas. Jei „tinkamumo“ rūšiavimas jums netinka, galite atlikti išplėstines išraiškas ir paprašyti, kad „Solr“ grąžintų „tokius, kokie yra“, panašiai kaip tai daro RDBMS. Galite rūšiuoti įvairiuose laukuose ir filtruoti pagal kategorijas. Jūs netgi galite tai išmokti reitinguoti - tai mašininio mokymosi galimybė, leidžianti „Solr“ „išmokti“ tai, kas, jūsų nuomone, yra svarbiausias rezultatas. Mes iš tikrųjų tik subraižėme paviršių.

Kodėl Solr?

Taigi, jei jums reikia paieškos sistemos, galite pasirinkti naudoti „Solr“. Tačiau tai taip pat nereikalinga, paskirstyta dokumentų duomenų bazė, siūlanti SQL (iš dėžutės) tiems, kurie nori prijungti tokius įrankius kaip „Tableau“. Tai galima išplėsti „Java“ (ir kitomis JVM kalbomis), tačiau naudodamiesi į REST panašia sąsaja galite lengvai su ja kalbėti JSON arba XML.

„Solr“ gali būti ne geriausias jūsų pasirinkimas, jei turite paprastų duomenų, kuriuos ieškote pagal raktą ir dažniausiai rašote. „Solr“ turi per daug vandentiekio, kad galėtų atlikti didesnius darbus, kad tai būtų taip pat efektyvu, kaip pagrindinės vertės parduotuvė.

„Solr“ yra aiškus pasirinkimas, jei jūsų paieška yra orientuota į tekstą. Tačiau yra ir kitų nelabai akivaizdžių atvejų, kai tai gali būti tinkamas pasirinkimas, pavyzdžiui, norint atlikti erdvinę paiešką visiems tiems žmonėms, kurių mobiliuosius telefonus įsilaužėte, stebėti jų vietą. Aš tik sakau, kad ir jūs, pone Putinai, galbūt norėsite pasirinkti „Solr“.

Nepaisant to, tiesiog atminkite, kad draugai neleidžia draugams daryti SQL bla kaip „% stuff“ užklausos.