Ohjelmointi

Mikä on Apache Solr? Ja miksi sinun pitäisi käyttää sitä

Apache Solr on Apache Lucenen aliprojekti, joka on indeksointitekniikka viimeksi luodun haku- ja indeksitekniikan takana. Solr on sydämeltään hakukone, mutta se on paljon enemmän. Se on NoSQL-tietokanta, jolla on kaupallinen tuki. Se on asiakirjatietokanta, joka tarjoaa SQL-tukea ja suorittaa sen hajautetulla tavalla.

Kuulostaa mielenkiintoiselta? Liity kanssani tutustumaan tarkemmin. (Täysi paljastus: Työskentelen Lucidworksissä, joka työllistää monia Solr-projektin avaintekijöitä.)

Tarvitset kunnollisen koneen (tai käytä vain AWS-esiintymää), jossa on mieluiten vähintään 8 Gt RAM-muistia. Löydät Solrin osoitteesta //lucene.apache.org/solr. Tarvitset myös Java-virtuaalikoneen version 8. Pura / untar Solr hakemistoon, varmista, että JAVA_HOME on asetettu ja että java-binaari on polkusi. Vaihda hakemistoon Solr is in ja kirjoita bin / solr start -e cloud -oprompt. Tämä käynnistää kannettavan tietokoneesi kahden solmun klusterin, jonka näytekokoelma nimeltä käynnistyksen aloittaminen on jo ladattu.

Normaali käynnistys olisi vain bin / solr start -c Käynnistä Solr “pilvitilassa”. Mutta jos aiot potkaista renkaita, haluat todella nähdä monisolmun asennuksen, vaikka se olisi omalla kannettavalla tietokoneellasi. Solr Cloud on tapa, jolla haluat suorittaa modernin Solr-asennuksen. Jos aloitat ilman -c aloitat vanhassa tilassa. Se on huono asia.

Asiakirjat ja kokoelmat

Solr on asiakirjarakenteinen tietokanta. Henkilöt, kuten Henkilö, koostuvat kentistä, kuten nimi, osoite ja sähköpostiosoite. Nämä asiakirjat tallennetaan kokoelmiin. Kokoelmat ovat lähinnä relaatiotietokannan taulukoita. Toisin kuin relaatiotietokannassa, "Henkilö" voi sisältää kokonaisuuden kokonaan, mikä tarkoittaa, että jos henkilöllä on useita osoitteita, nämä osoitteet voidaan tallentaa yhteen "Henkilö" -asiakirjaan. Relaatiotietokantaan tarvitset erillisen osoitetaulukon.

Henkilö {

"Id": "1333425",

"Etunimi": "Francis",

“Middle_name”: “J.”,

"Last_name": "Underwood",

"Osoite": ["1600 Pennsylvania Ave NW, Washington, DC 20500", "1609 Far St. NW, Washington, DC, 20036"],

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

}

Sirpaleet, jäljennökset ja ytimet

Toisin kuin useimmissa relaatiotietokannoissa, tiedot sirpaloituvat ja replikoidaan automaattisesti Solr Cloudin kautta. Tämä tarkoittaa, että kun kirjoitat asiakirjan oikein määritettyyn kokoelmaan, se jaetaan yhteen Solr-esiintymistä. Se on "sirpaleista". Se tehdään lukutehon parantamiseksi. Jokainen asiakirja kopioidaan tai kopioidaan ainakin kerran (määritettävissä) redundanssia varten. Tämä tarkoittaa, että voit menettää Solr-esiintymän ja kärsiä vain heikentyneestä suorituskyvystä koko klusterissasi, mutta et menetä tietoja.

Klusteri on joukko "solmuja", jotka ovat Java Virtual Machine (JVM) -esiintymiä, jotka käyttävät Solria. Solmu voi sisältää useita "ytimiä". Jokainen ydin on kopio loogisesta "sirpaleesta". Yleensä ytimet tunnistetaan kokoelmana, sirpaleiden numerona ja replikanumerona, jotka on liitetty yhteen merkkijonona.

Kokoelman luominen

Vaikka on olemassa REST-tyyppisiä HTTP-rajapintoja, voit käyttää vain bin / solr (tai bin / solr. cmd) komento luoda ja hallita kokoelmia. Käyttäkäämme kiistanalaista aihetta ja etsimme julkinen tietojoukko. Tartu kopio terveydenhuollon kustannustiedoista osoitteesta Data.gov. Tartu yksinkertaisuuden vuoksi CSV-tiedostona. Olettaen, että aloitit Solrin ohjeiden mukaan, luo tällä komennolla kokoelma nimeltä ipps:

bin / solr create_collection -d basic_configs -c ipps

Ladataan seuraavaksi tiedot kokoelmaan. Ensin on korjattava muutama asia CSV-tiedostossa. Poista kaikki $ merkkiä. Muuta myös kenttien nimien ylärivillä kentät välilyönneistä alaviivoiksi. Tee se luettavaksi näin:

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: lle on tehokkaampia työkaluja kuin mitä Solr on sisäänrakennettu (kuten se, joka on rakennettu tuotteeseen, jota yritykseni myy), mutta kaiken kaikkiaan tämä ei ollut monimutkainen korjaus!

Ennen kuin lataamme tietoja, meidän on kuitenkin luotava "skeema", joka on samanlainen kuin sinulla relaatiotietokannassa. Voimme tehdä sen kiemura -komento Linux / Macissa tai voit käyttää GUI-työkalua, kuten Postman.

curl -X POST -H ’Sisältötyyppi: application / json’ —data-binaarinen ’{

"Add-field": {

“Name”: ”DRG_Definition”,

“Type”: ”text_general”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_Id”,

“Type”: ”plong”,

“DocValues”: tosi,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_Name”,

“Type”: ”text_general”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_Street_Address”,

“Type”: ”string”,

"Indeksoitu": false,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_City”,

“Type”: ”string”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_State”,

“Type”: ”string”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Provider_Zip_Code”,

“Type”: ”string”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Hospital_Referral_Region_Description”,

“Type”: ”text_general”,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Total_Discharges”,

“Type”: ”pint”,

“DocValues”: tosi,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Keskimääräiset_katetut_maksut”,

“Type”: ”pdouble”,

“DocValues”: tosi,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Name”: ”Average_Total_Payments”,

“Type”: ”pdouble”,

“DocValues”: tosi,

"Indeksoitu": totta,

"Tallennettu": totta

  },

"Add-field": {

“Nimi”: ”Keskimääräiset_lääketieteelliset_maksut”,

“Type”: ”pdouble”,

“DocValues”: tosi,

"Indeksoitu": totta,

"Tallennettu": totta

  }

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

Nämä ovat kenttien nimet, kenttätyypit ja sen, indeksoidaanko ja tallennetaanko kenttä. Lisätietoja Solrin tietotyypeistä ja yleisestä kaavasta on viiteoppaassa.

Nyt kun meillä on skeema, voimme "lähettää" tiedot Solriin. Tätä varten on olemassa monia reittejä. Voit käyttää curl- tai Postman-ohjelmaa, mutta Solr sisältää komentorivityökalun, bin / post, joka on saatavana Linux- ja MacOS-käyttöjärjestelmissä.

bin / post -c ipps -parammit "rowid = id" -tyyppi "text / csv" /home/acoliver/Downloads/Potilas_Prospektiivinen_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 esimerkiksi \ exampledocs \ post.jar \ Users \ acoliver \ Downloads \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DRG __-_ FY2011.csv

W00t, sinulla on tietoja!

Tietojen kysely

Solrilla on kielisitoja, joita voit käyttää Java- tai Python-tiedostoissa, tai jos olet enemmän tehokehittäjä, voit käyttää sitä PHP: lle. Tai voit käyttää vain kiharaa tai Postmania tai selainta.

Liitä tämä osoiteriville:

// paikallinen isäntä: 8983 / solr / ipps / select? sisennys = päällä & q = *: * & wt = json

Tämä URL on yksinkertainen kysely, joka palauttaa 10 osuvinta tulosta. Voit muuttaa sivutusta ja saada lisätietoja Solrin Solrin kyselykielestä ja jopa vaihtoehtoisista kyselyjäsenistä viiteoppaasta. Jos haluat nähdä saman asian XML: ssä, voit määrittää sen.

Ehkä haluat tehdä jotain hieman edistyneempää. Alla löydät menettelyt kaupungissa, jossa asun:

// paikallinen isäntä: 8983 / solr / ipps / select? luetelmakohta = päällä & q = Provider_State: NC% 20AND% 20Hospital_Referral_Region_Description:% 22 * ​​Durham% 22 & wt = json

Voit mennä paljon pidemmälle ja tehdä enemmän yhteenvetoja, laskelmia ja sumeita vastaavuuksia.

Solrin hallinto

Jotkut teistä ovat kuin "Hyvä jumala, komentorivi pelottaa minua!" Joten se on hieno, Solrilla on GUI. Meni // localhost: 8983 / solr ja katso tämä kauneus:

Jos valitset kokoelman sivulta, voit jopa siirtyä näyttöön, jonka avulla voit täyttää kyselyparametrit:

Jos kyseinen näyttö aiheuttaa sinulle päänsärkyä, voit siirtyä osoitteeseen // localhost: 8983 / solr / ipps / Browse.

Olemme tehneet yksinkertaisia ​​tekstikyselyjä. Voit myös tehdä alueita ja paikkatietoja. Jos "osuvuus" -lajittelu ei toimi sinulle, voit tehdä edistyneempiä lausekkeita ja antaa Solrille palauttaa asioita "sellaisina kuin ne löytyvät", aivan kuten RDBMS tekee sen. Voit lajitella eri kentissä ja suodattaa luokkien mukaan. Voit jopa saada sen "oppimaan luokittelemaan" - koneoppimiskyvyn, jonka avulla Solr voi "oppia" käyttäjien mielestä olennaisimman tuloksen. Olemme todella naarmuuntuneet vain pintaan.

Miksi Solr?

Joten selkeästi voit valita Solrin, jos tarvitset hakukonetta. Se on kuitenkin myös turha, hajautettu asiakirjatietokanta, joka tarjoaa SQL: n (heti pakkauksesta) niille, jotka haluavat liittää työkaluja, kuten Tableau. Se on laajennettavissa Java-kielellä (ja muilla JVM-kielillä), ja silti REST-tyyppisellä käyttöliittymällä voit helposti puhua JSON- tai XML-tiedostoja siihen.

Solr ei ehkä ole paras valinta, jos sinulla on yksinkertaisia ​​tietoja, joita etsit avaimella ja kirjoitat enimmäkseen. Solrilla on liian paljon LVI-tekniikkaa, jotta isompien asioiden tekeminen olisi yhtä tehokasta kuin avainarvomyymälä.

Solr on selkeä valinta, jos haku on hyvin tekstikeskeistä. On kuitenkin muitakin ei-niin ilmeisiä tapauksia, joissa se voi olla hyvä valinta, kuten paikkatutkimuksiin kaikille ihmisille, joiden matkapuhelimet olet hakkeroinut, seuraamaan heidän sijaintiaan. Sanon vain, että sinäkin, herra Putin, haluat ehkä valita Solrin.

Muista kuitenkin, että ystävät eivät anna ystävien tehdä SQL: ää bla kuten '% stuff' kyselyt.