Programmering

Hva er Apache Solr? Og hvorfor du skal bruke den

Apache Solr er et delprosjekt av Apache Lucene, som er indekseringsteknologien bak sist opprettet søke- og indekseteknologi. Solr er en sentralt søkemotor, men det er mye mer enn det. Det er en NoSQL-database med transaksjonsstøtte. Det er en dokumentdatabase som tilbyr SQL-støtte og utfører den på en distribuert måte.

Høres interessant ut? Bli med meg for en nærmere titt. (Fullstendig redegjørelse: Jeg jobber for Lucidworks, som ansetter mange av de viktigste bidragsyterne til Solr-prosjektet.)

Du trenger en anstendig maskin (eller bare bruk en AWS-forekomst) med ideelt 8 GB eller mer RAM. Du finner Solr på //lucene.apache.org/solr. Du trenger også Java Virtual Machine versjon 8. Pakk ut / untar Solr i en katalog, sørg for at JAVA_HOME er satt, og at java binær er i din vei. Bytt til katalogen Solr er i og skriv bin / solr start -e sky -noprompt. Dette starter en to-node-klynge på den bærbare datamaskinen din med en prøvesamling som heter gettingstarted allerede lastet.

En normal oppstart ville bare være bin / solr start -c for å starte Solr i “sky” -modus. Men hvis du skal sparke dekkene, vil du virkelig se at en multi-node installeres, selv om den er på din egen bærbare datamaskin. Solr Cloud er slik du vil kjøre en moderne Solr-installasjon. Hvis du starter uten -c du starter i eldre modus. Det er en dårlig ting.

Dokumenter og samlinger

Solr er en dokumentstrukturert database. Enheter som "Person" er sammensatt av felt som navn, adresse og e-post. Disse dokumentene er lagret i samlinger. Samlinger er nærmest analoge til tabeller i en relasjonsdatabase. Imidlertid, i motsetning til i en relasjonsdatabase, kan "Person" fullstendig inneholde enheten, noe som betyr at hvis en person har flere adresser, kan disse adressene lagres i ett "Person" -dokument. I en relasjonsdatabase trenger du en egen adressetabell.

Person {

"Id": "1333425",

“First_name”: “Francis”,

“Mellomnavn”: “J.”,

“Last_name”: “Underwood”,

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

“Telefon”: [“202-456-1111”, “202-456-1414”]

}

Skår, kopier og kjerner

I motsetning til i de fleste relasjonsdatabaser, blir data automatisk splittet og replikert via Solr Cloud. Dette betyr at når du skriver et dokument til en riktig konfigurert samling, distribueres det til en av Solr-forekomster. Det er "sharding." Det er gjort for å forbedre leseytelsen. Hvert dokument kopieres eller kopieres også minst en gang (konfigurerbart) for redundans. Dette betyr at du kan miste en Solr-forekomst og bare lide redusert ytelse på tvers av klyngen din, men ikke tap av data.

En klynge er et sett med "noder", som er Java Virtual Machine (JVM) -forekomster som kjører Solr. En node kan inneholde flere "kjerner". Hver kjerne er en kopi av en logisk "skjær". Vanligvis kjerner identifiseres av samlingen, skjærnummeret og replikanummeret sammenkoblet som en streng.

Opprette en samling

Selv om det finnes REST-lignende HTTP-grensesnitt, kan du bare bruke søppel / solr (eller søppel / solr.cmd) kommando for å opprette og kontrollere samlinger. La oss bruke et ikke-kontroversielt emne og finne et offentlig datasett. Ta en kopi av helsekostnadsdata fra Data.gov. For enkelhets skyld, ta det som en CSV. Forutsatt at du startet Solr som anvist, bruk denne kommandoen til å lage en samling kalt ipps:

bin / solr create_collection -d basic_configs -c ipps

La oss deretter laste inn data i samlingen. Først må vi fikse noen få ting i CSV-filen. Fjern alt $ tegn. I den øverste raden med feltnavn endrer du også felt fra mellomrom til understreker. Få det til å lese slik:

DRG_Definition, Provider_Id, Provider_Name, Provider_Street_Address, Provider_City, Provider_State, Provider_Zip_Code, Hospital_Referral_Region_Description, Total_Disarges, Average_Covered_Charges, Average_Total_Payments, Average_Medicare_P

Det er kraftigere verktøy for ETL enn det som er innebygd i Solr (for eksempel det som er innebygd i produktet mitt firma selger), men generelt var dette ikke en komplisert løsning!

Før vi laster inn data, må vi lage et "skjema" som ligner på det du har i en relasjonsdatabase. Vi kan gjøre det med krølle kommando på Linux / Mac, eller du kan bruke et GUI-verktøy som Postman.

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

“Add-field”: {

“Navn”: ”DRG_Definition”,

“Type”: ”text_general”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Name”: ”Provider_Id”,

“Type”: ”plong”,

“DocValues”: sant,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Name”: ”Provider_Name”,

“Type”: ”text_general”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Provider_Street_Address”,

“Type”: ”streng”,

"Indeksert": falsk,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Provider_City”,

“Type”: ”streng”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Provider_State”,

“Type”: ”streng”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Provider_Zip_Code”,

“Type”: ”streng”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Name”: ”Hospital_Referral_Region_Description”,

“Type”: ”text_general”,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Total_Discharges”,

“Type”: ”halvliter”,

“DocValues”: sant,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Name”: ”Average_Covered_Charges”,

“Type”: ”pdouble”,

“DocValues”: sant,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

“Navn”: ”Gjennomsnittlig_Betalinger”,

“Type”: ”pdouble”,

“DocValues”: sant,

“Indeksert”: sant,

“Lagret”: sant

  },

“Add-field”: {

"Navn": "Gjennomsnittlig_medisinsk betaling",

“Type”: ”pdouble”,

“DocValues”: sant,

“Indeksert”: sant,

“Lagret”: sant

  }

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

Dette er feltnavn, felttyper og hvorvidt feltet skal indekseres og lagres eller ikke. Du kan finne ut mer om Solrs datatyper og overordnede skjema i referansehåndboken.

Nå som vi har et skjema, kan vi "poste" dataene i Solr. Det er mange ruter for å gjøre dette. Du kan bruke curl eller Postman, men Solr inkluderer et kommandolinjeverktøy, bin / post, som vil være tilgjengelig ut av boksen på Linux og 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.

På Windows:

java -Dtype = text / csv -Dc = ipps -Dparams = "rowid = id" -jar eksempel \ exampledocs \ post.jar \ Brukere \ acoliver \ Nedlastninger \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis-Related_Groups__DR___

W00t du har data!

Spørring av dataene dine

Det er språkbindinger for Solr som du kan bruke til Java eller Python, eller hvis du er mer en kraftutvikler, kan du bruke den til PHP. Eller du kan bare bruke curl eller Postman eller nettleseren din.

Lim dette inn i en adresselinje:

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

Denne URL-en er et enkelt spørsmål som returnerer de 10 mest relevante resultatene. Du kan endre sideskjæringen og finne ut mer om Solrs spørringsspråk og til og med alternative spørringsparsere i referanseguiden. Hvis du vil se det samme i XML, kan du konfigurere det.

Kanskje du vil gjøre noe litt mer avansert. Nedenfor finner du prosedyrer i byen jeg bor i:

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

Du kan gå mye lenger og gjøre flere sammendrag og beregninger og uklare treff.

Solr administrasjon

Noen av dere er som "Godt, kommandolinjen skremmer meg!" Så det er greit, Solr har et GUI. Kom til // localhost: 8983 / solr og se denne skjønnheten:

Hvis du velger samlingen din på siden, kan du til og med gå til et skjermbilde som lar deg fylle ut spørsmålsparametere:

Hvis skjermen gir deg hodepine, kan du bare gå til // localhost: 8983 / solr / ipps / browse.

Vi har gjort enkle tekstspørsmål. Du kan også gjøre områder og romlige søk. Hvis "relevans" -sorteringen ikke fungerer for deg, kan du gjøre mer avanserte uttrykk og få Solr til å returnere ting "slik de blir funnet" omtrent som en RDBMS gjør det. Du kan sortere på forskjellige felt og filtrere etter kategorier. Du kan til og med få det til å "lære å rangere" - en maskinlæringsevne som lar Solr "lære" hva brukerne synes er det mest relevante resultatet. Vi har egentlig bare skrapet overflaten.

Hvorfor Solr?

Så klart kan du velge å bruke Solr hvis du trenger en søkemotor. Imidlertid er det også en overflødig distribuert dokumentdatabase som tilbyr SQL (out of the box) for de som ønsker å koble til verktøy som Tableau. Den kan utvides på Java (og andre JVM-språk), og med det REST-lignende grensesnittet kan du enkelt snakke JSON eller XML til den.

Solr er kanskje ikke det beste valget hvis du har enkle data som du ser etter nøkkel og som for det meste skriver videre. Solr har for mye rørleggerarbeid til å gjøre større ting for å være like effektive for det som en nøkkelverdibutikk.

Solr er et klart valg hvis søket ditt er veldig tekstsentrert. Imidlertid er det andre ikke så åpenbare tilfeller der det kan være et godt valg som for romlige søk på alle menneskene hvis mobiltelefoner du har hacket for å spore posisjonen deres. Jeg sier bare at du, Mr. Putin, kanskje også vil velge Solr.

Uansett, bare husk at venner ikke lar venner gjøre SQL bla som '% stuff' spørsmål.

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