Programmēšana

Kas ir Apache Solr? Un kāpēc jums tas būtu jāizmanto

Apache Solr ir Apache Lucene apakšprojekts, kas ir indeksēšanas tehnoloģija, kas ir nesen izveidotās meklēšanas un indeksēšanas tehnoloģijas pamatā. Solr sirdī ir meklētājprogramma, taču tas ir daudz kas vairāk. Tā ir NoSQL datu bāze ar darījumu atbalstu. Tā ir dokumentu datu bāze, kas piedāvā SQL atbalstu un izpilda to sadalītā veidā.

Izklausās interesanti? Pievienojieties man, lai to apskatītu tuvāk. (Pilnīga informācija: es strādāju uzņēmumā Lucidworks, kurā strādā daudzi no galvenajiem Solr projekta atbalstītājiem.)

Jums ir nepieciešama pienācīga mašīna (vai vienkārši izmantojiet AWS instanci) ar ideālu 8 GB vai vairāk RAM. Solr varat atrast vietnē //lucene.apache.org/solr. Jums nepieciešama arī Java virtuālās mašīnas versija 8. Izpakojiet / untar Solr direktorijā, pārliecinieties, vai ir iestatīts JAVA_HOME un vai jūsu ceļā ir java binārā versija. Pārslēdzieties uz direktoriju Solr ir un ierakstiet bin / solr start -e mākonis -oprompt. Tādējādi jūsu klēpjdatorā tiek sākta divu mezglu kopa ar jau ielādētu paraugu kolekciju, ko sauc par sākšanu.

Normāls starta gadījums vienkārši būtu bin / solr start -c lai sāktu Solr “mākoņa” režīmā. Bet, ja jūs gatavojaties spert riepas, jūs patiešām vēlaties redzēt vairāku mezglu uzstādīšanu, pat ja tas ir jūsu klēpjdatorā. Solr Cloud ir veids, kā vēlaties palaist modernu Solr instalēšanu. Ja jūs sākat bez -c sāksit mantotajā režīmā. Tā ir slikta lieta.

Dokumenti un kolekcijas

Solr ir dokumentu strukturēta datu bāze. Tādas vienības kā “Persona” sastāv no tādiem laukiem kā vārds, adrese un e-pasts. Šie dokumenti tiek glabāti kolekcijās. Kolekcijas ir vistuvākais analogs relāciju datu bāzes tabulām. Tomēr, atšķirībā no relāciju datu bāzes, “Persona” var pilnībā saturēt entītiju, tas nozīmē, ja personai ir vairākas adreses, šīs adreses var saglabāt vienā “Persona” dokumentā. Relāciju datu bāzē jums būs nepieciešama atsevišķa adrešu tabula.

Persona {

"Id": "1333425",

“First_name”: “Francis”,

“Middle_name”: “J.”,

“Last_name”: “Underwood”,

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

“Tālrunis”: [“202-456-1111”, “202-456-1414”]

}

Laužas, kopijas un serdeņi

Atšķirībā no lielākās daļas relāciju datu bāzēm dati tiek automātiski sadalīti un atkārtoti, izmantojot Solr Cloud. Tas nozīmē, ka, rakstot dokumentu pareizi konfigurētā kolekcijā, tas tiek izplatīts vienā no Solr instancēm. Tas ir "šķembu". Tas tiek darīts, lai uzlabotu lasīšanas veiktspēju. Katrs dokuments arī tiek atkārtots vai kopēts vismaz vienu reizi (konfigurējams) atlaišanai. Tas nozīmē, ka jūs varat zaudēt Solr instanci un ciest tikai samazinātu veiktspēju visā klasterī, bet nezaudēt datus.

Klasteris ir “mezglu” kopa, kas ir Java Virtual Machine (JVM) instances, kurās darbojas Solr. Mezglā var būt vairāki “kodoli”. Katrs kodols ir loģiskas “lauskas” kopija. Parasti serdes tiek identificētas pēc kolekcijas, lauskas numura un kopijas numura, kas savienota kopā kā virkne.

Kolekcijas izveidošana

Lai gan ir REST līdzīgas HTTP saskarnes, varat vienkārši izmantot bin / solr (vai bin / solr.cmd) komandu, lai izveidotu un kontrolētu kolekcijas. Izmantosim strīdīgu tēmu un atradīsim publisku datu kopu. Paņemiet veselības aprūpes izmaksu datu kopiju no Data.gov. Vienkāršības labad satveriet to kā CSV. Pieņemot, ka esat sācis Solr kā norādīts, izmantojiet šo komandu, lai izveidotu kolekciju ar nosaukumu ipps:

bin / solr create_collection -d basic_configs -c ipps

Tālāk ielādēsim datus kolekcijā. Vispirms mums ir jānovērš dažas lietas CSV failā. Noņemiet visu $ rakstzīmes. Lauku nosaukumu augšējā rindā mainiet arī laukus no atstarpēm uz pasvītrām. Padariet to lasāmu šādi:

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 ir jaudīgāki rīki nekā tie, kas iebūvēti Solr (piemēram, tie, kas iebūvēti produktā, kuru pārdod mans uzņēmums), taču kopumā tas nebija sarežģīts labojums!

Lai gan mēs ielādējam datus, mums ir jāizveido “shēma”, kas ir līdzīga tai, kāda jums ir relāciju datu bāzē. Mēs to varam izdarīt ar čokurošanās komandu Linux / Mac vai varat izmantot GUI rīku, piemēram, Postman.

čokurošanās -X POST -H ‘Satura tips: lietojumprogramma / json’ - dati-binārs ’{

“Add-field”: {

“Name”: “DRG_Definition”,

“Type”: “text_general”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_Id”,

“Tips”: “plong”,

“DocValues”: taisnība,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_Name”,

“Type”: “text_general”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_Street_Address”,

“Type”: “string”,

“Indeksēts”: nepatiesa,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_City”,

“Type”: “string”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_State”,

“Type”: “string”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Provider_Zip_Code”,

“Type”: “string”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: ”Hospital_Referral_Region_Description”,

“Type”: “text_general”,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Total_Discharges”,

“Tips”: “pinte”,

“DocValues”: taisnība,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Average_Covered_Charges”,

“Type”: “pdouble”,

“DocValues”: taisnība,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Average_Total_Payments”,

“Type”: “pdouble”,

“DocValues”: taisnība,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  },

“Add-field”: {

“Name”: “Average_Medicare_Payments”,

“Type”: “pdouble”,

“DocValues”: taisnība,

“Indeksēts”: taisnība,

“Glabājas”: taisnība

  }

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

Tie ir lauku nosaukumi, lauku tipi un tas, vai indeksēt vai uzglabāt lauku. Vairāk par Solr datu tipiem un vispārējo shēmu varat uzzināt atsauces rokasgrāmatā.

Tagad, kad esam ieguvuši shēmu, mēs varam "publicēt" datus Solr. Lai to izdarītu, ir daudz maršrutu. Jūs varētu izmantot čokurošanos vai Postman, bet Solr ietver komandrindas rīku bin / post, kas Linux un MacOS būs pieejams ārpus kastes.

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.

Operētājsistēmā 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____grupas_grupa

W00t jums ir dati!

Pieprasot datus

Solr ir valodas saites, kuras varat izmantot Java vai Python, vai, ja jūs vairāk esat enerģijas izstrādātājs, varat to izmantot PHP. Vai arī jūs varat vienkārši izmantot čokurošanos vai Pastnieku vai savu pārlūkprogrammu.

Ielīmējiet to adreses joslā:

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

Šis URL ir vienkāršs vaicājums, kas atgriež 10 visatbilstošākos rezultātus. Atsauces rokasgrāmatā varat mainīt lapošanu un uzzināt vairāk par Solr's Solr vaicājumu valodu un pat alternatīviem vaicājuma parsētājiem. Ja vēlaties redzēt to pašu XML, varat to konfigurēt.

Varbūt jūs vēlaties darīt kaut ko nedaudz progresīvāku. Zemāk ir aprakstītas procedūras pilsētā, kurā es dzīvoju:

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

Jūs varat iet daudz tālāk un veikt vairāk kopsavilkumu, aprēķinu un neskaidru atbilstību.

Solr administrēšana

Daži no jums ir tādi kā “Labi Dievs, komandrinda mani biedē!” Tas ir labi, Solr ir GUI. Nokļuvis // localhost: 8983 / solr un redzējis šo skaistumu:

Ja sānos atlasāt kolekciju, varat pat pāriet uz ekrānu, kas ļaus aizpildīt vaicājuma parametrus:

Ja šis ekrāns sagādā galvassāpes, varat vienkārši doties uz vietni // localhost: 8983 / solr / ipps / pārlūkot.

Mēs esam veikuši vienkāršus teksta vaicājumus. Varat arī veikt diapazonus un telpiskos meklējumus. Ja šķirošana “atbilstība” jums nedarbojas, varat veikt sarežģītākas izteiksmes un likt Solr atgriezt lietas “tādas, kādas tās ir atrastas” līdzīgi kā to dara RDBMS. Jūs varat kārtot dažādos laukos un filtrēt pēc kategorijām. Jūs pat varat to iemācīties klasificēt - mašīnmācīšanās iespējas, kas ļauj Solr “iemācīties” to, ko lietotāji uzskata par visatbilstošāko rezultātu. Mēs patiešām esam tikai saskrāpējuši virsmu.

Kāpēc Solr?

Tik skaidri jūs varat izvēlēties izmantot Solr, ja jums nepieciešama meklētājprogramma. Tomēr tā ir arī lieka, izplatīta dokumentu datu bāze, kas piedāvā SQL (ārpus kastes) tiem, kas vēlas savienot tādus rīkus kā Tableau. Tas ir paplašināms Java (un citās JVM valodās), un tomēr ar REST līdzīgo interfeisu jūs varat viegli runāt ar to JSON vai XML.

Solr, iespējams, nav labākā izvēle, ja jums ir vienkārši dati, kurus meklējat pēc atslēgas un lielākoties rakstāt. Solr ir pārāk daudz santehnikas, lai veiktu lielākas lietas, lai tās būtu tikpat efektīvas kā galveno vērtību veikals.

Solr ir skaidra izvēle, ja jūsu meklēšana ir ļoti orientēta uz tekstu. Tomēr ir arī citi ne tik acīmredzami gadījumi, kad tā varētu būt laba izvēle, piemēram, telpiskiem meklējumiem visiem cilvēkiem, kuru mobilos tālruņus esat uzlauzis, lai izsekotu viņu atrašanās vietu. Es tikai saku, ka arī jūs, Putina kungs, varētu vēlēties izvēlēties Solru.

Neatkarīgi no tā, vienkārši atcerieties, ka draugi neļauj draugiem darīt SQL bla kā '% stuff' vaicājumi.

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