Programiranje

Kaj je Apache Solr? In zakaj bi ga morali uporabljati

Apache Solr je podprojekt Apache Lucene, ki je tehnologija indeksiranja za nedavno ustvarjeno tehnologijo iskanja in indeksiranja. Solr je v srcu iskalnik, vendar je veliko več kot to. To je baza podatkov NoSQL s transakcijsko podporo. To je baza podatkov dokumentov, ki ponuja podporo za SQL in jo izvaja na porazdeljen način.

Sliši se zanimivo? Pridružite se mi za podrobnejši pogled. (Popolno razkritje: delam za Lucidworks, ki zaposluje veliko ključnih sodelavcev pri projektu Solr.)

Potrebujete spodoben računalnik (ali preprosto uporabite primerek AWS) z idealno 8 GB ali več RAM-a. Solr lahko najdete na //lucene.apache.org/solr. Potrebujete tudi Java Virtual Machine različice 8. Razpakirajte / untar Solr v imenik, poskrbite, da je nastavljen JAVA_HOME in da je binarni java na vaši poti. Preklopite v imenik in vnesite Solr bin / solr start -e cloud -noprompt. S tem se na prenosnem računalniku zažene grozd z dvema vozliščema z vzorčno zbirko, imenovano Getstarted уже naloženo.

Običajni zagon bi bil pač bin / solr start -c za zagon Solrja v načinu "oblak". Če pa boste pnevmatike brcali, si resnično želite namestitev več vozlišč, tudi če je na vašem prenosnem računalniku. Solr Cloud je način, na katerega želite zagnati moderno namestitev Solr. Če začnete brez -c začeli boste v starejšem načinu. To je slabo.

Dokumenti in zbirke

Solr je dokumentno strukturirana baza podatkov. Subjekti, kot je »Oseba«, so sestavljeni iz polj, kot so ime, naslov in e-pošta. Ti dokumenti so shranjeni v zbirkah. Zbirke so najbližji analog tabelam v relacijski bazi podatkov. Vendar pa lahko za razliko od relacijske baze podatkov "oseba" popolnoma vsebuje entiteto, kar pomeni, da če ima oseba več naslovov, je te naslove mogoče shraniti v enem dokumentu "oseba". V relacijski bazi podatkov bi potrebovali ločeno tabelo naslovov.

Oseba {

"Id": "1333425",

“First_name”: “Francis”,

“Srednje ime”: “J.”,

“Last_name”: “Underwood”,

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

"Telefon": ["202-456-1111", "202-456-1414"]

}

Odlomki, replike in jedra

Za razliko od večine relacijskih zbirk podatkov se podatki samodejno ostrijo in razmnožujejo prek Solr Cloud. To pomeni, da ko dokument zapišete v pravilno konfigurirano zbirko, se ta distribuira v enega od primerov Solr. To je "shading". To se naredi za izboljšanje bralne učinkovitosti. Vsak dokument se tudi kopira ali kopira vsaj enkrat (nastavljiv) zaradi odvečnosti. To pomeni, da lahko izgubite primerek Solr in trpite le zaradi zmanjšane zmogljivosti v svoji gruči, vendar brez izgube podatkov.

Grozd je nabor "vozlišč", ki so primerki Java Virtual Machine (JVM), v katerih se izvaja Solr. Vozlišče lahko vsebuje več »jeder«. Vsako jedro je kopija logičnega "drobca". Na splošno se jedra prepoznajo po zbirki, številki drobca in številki replike, ki so združene kot niz.

Ustvarjanje zbirke

Čeprav obstajajo REST-podobni vmesniki HTTP, lahko preprosto uporabite koš / solr (ali bin / solr.cmd) ukaz za ustvarjanje in nadzor zbirk. Uporabimo ne sporno temo in poiščimo javni nabor podatkov. Poiščite kopijo podatkov o stroških zdravstvenega varstva na spletnem mestu Data.gov. Zaradi poenostavitve ga vzemite kot CSV. Če predpostavimo, da ste Solr začeli po navodilih, uporabite ta ukaz za ustvarjanje zbirke z imenom ipps:

bin / solr create_collection -d basic_configs -c ipps

Nato naložimo podatke v zbirko. Najprej moramo popraviti nekaj stvari v datoteki CSV. Odstranite vse datoteke $ znakov. Prav tako v zgornji vrstici imen polj spremenite polja iz presledkov v podčrtaje. Naj se bere takole:

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

Obstajajo močnejša orodja za ETL, kot so vgrajena v Solr (na primer tisto, ki je vgrajeno v izdelek, ki ga prodaja moje podjetje), vendar to na splošno ni bilo zapleteno!

Preden naložimo vse podatke, pa moramo ustvariti "shemo", ki je podobna tisti, ki jo imate v relacijski bazi podatkov. To lahko storimo z curl ukaz v Linuxu / Macu ali pa uporabite orodje GUI, kot je Postman.

curl -X POST -H ‘Content-type: application / json’ —data-binary ‘{

“Add-field”: {

“Name”: ”DRG_Definition”,

“Type”: ”text_general”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Provider_Id”,

“Type”: “plong”,

“DocValues”: res,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Ime ponudnika”,

“Type”: ”text_general”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: ”Provider_Street_Address”,

“Type”: ”niz”,

"Indeksirano": napačno,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Provider_City”,

“Type”: ”niz”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Provider_State”,

“Type”: ”niz”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: ”Provider_Zip_Code”,

“Type”: ”niz”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Hospital_Referral_Region_Description”,

“Type”: ”text_general”,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Skupaj_praznikov”,

“Type”: “pint”,

“DocValues”: res,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Povprečne_pokrite_napolnitve”,

“Type”: “pdouble”,

“DocValues”: res,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: ”Povprečna_skupna_plačila”,

“Type”: “pdouble”,

“DocValues”: res,

"Indeksirano": res,

"Shranjeno": res

  },

“Add-field”: {

“Name”: “Povprečna_zdravila_plačil”,

“Type”: “pdouble”,

“DocValues”: res,

"Indeksirano": res,

"Shranjeno": res

  }

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

To so imena polj, vrste polj in določanje ali shranjevanje polja. Več o podatkovnih vrstah in splošni shemi Solr lahko najdete v referenčnem priročniku.

Zdaj, ko imamo shemo, lahko podatke "objavimo" v Solr. Za to obstaja veliko poti. Lahko uporabite curl ali Postman, vendar Solr vključuje orodje za ukazno vrstico bin / post, ki bo na voljo v Linuxu in MacOS-u.

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.

V sistemu Windows:

java -Dtype = text / csv -Dc = ipps -Dparams = "rowid = id" -jar primer \ exampledocs \ post.jar \ Users \ acoliver \ Downloads \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DR201G-VG_Gvps_DRG_GvS_DR201_Graps__DR201

W00t imate podatke!

Poizvedovanje po vaših podatkih

Za Solr obstajajo jezikovne vezi, ki jih lahko uporabite za Javo ali Python, ali če ste bolj močan razvijalec, lahko uporabite tistega za PHP. Lahko pa uporabite curl ali Postman ali brskalnik.

To prilepite v naslovno vrstico:

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

Ta URL je preprosta poizvedba, ki vrne 10 najpomembnejših rezultatov. Paginacijo lahko spremenite in v referenčnem priročniku izveste več o jeziku poizvedb Solr’s Solr in celo nadomestnih razčlenjevalcih poizvedb. Če želite videti isto v XML, lahko to nastavite.

Mogoče želite narediti kaj bolj naprednega. Spodaj najdete postopke v mestu, v katerem živim:

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

Lahko greste veliko dlje in naredite več povzetkov in izračunov ter nejasnih ujemanj.

Solr administracija

Nekateri ste kot "Dober bog, ukazna vrstica me prestraši!" To je v redu, Solr ima GUI. Pojdite na // localhost: 8983 / solr in si oglejte to lepoto:

Če svojo zbirko izberete ob strani, lahko celo odprete zaslon, na katerem boste lahko vnesli parametre poizvedbe:

Če vas ta zaslon boli, lahko preprosto pojdite na // localhost: 8983 / solr / ipps / browse.

Izvedli smo preproste besedilne poizvedbe. Izvajate lahko tudi obsege in prostorska iskanja. Če vam razvrščanje po »ustreznosti« ne ustreza, lahko naredite bolj napredne izraze in Solr vrne stvari, »ko so najdene«, podobno kot to počne RDBMS. Razvrstite lahko po različnih poljih in filtrirate po kategorijah. Lahko jo celo "naučite razvrščati" - zmožnost strojnega učenja, ki Solrju omogoča, da "izve", kaj uporabniki mislijo, da je najpomembnejši rezultat. Resnično smo samo opraskali površino.

Zakaj Solr?

Jasno je, da boste morda želeli uporabiti Solr, če potrebujete iskalnik. Je pa tudi odvečna, porazdeljena baza podatkov, ki ponuja SQL (takoj) za tiste, ki želijo povezati orodja, kot je Tableau. Razširljiv je v Javi (in drugih jezikih JVM), kljub temu pa lahko z vmesnikom, podobnim REST-u, z njim enostavno govorite v obliki JSON ali XML.

Solr morda ni najboljša izbira, če imate preproste podatke, ki jih iščete po ključih in večinoma pišete naprej. Solr ima preveč vodovoda, da bi lahko delal večje stvari, da bi bil za to enako učinkovit kot trgovina s ključnimi vrednostmi.

Solr je jasna izbira, če je vaše iskanje zelo osredotočeno na besedilo. Vendar pa obstajajo tudi drugi ne tako očitni primeri, ko bi bila morda dobra izbira, na primer za prostorska iskanja vseh tistih, katerih mobilni telefoni ste vdrli, da bi spremljali njihovo lokacijo. Pravim samo, da boste morda želeli izbrati Solr tudi vi, gospod Putin.

Ne glede na to, ne pozabite, da prijatelji ne dovolijo prijateljem SQL bla kot '% stvari' poizvedbe.

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