Programování

Co je Apache Solr? A proč byste to měli používat

Apache Solr je dílčím projektem Apache Lucene, což je indexovací technologie za naposledy vytvořenou vyhledávací a indexovací technologií. Solr je srdcem vyhledávače, ale je to mnohem víc. Jedná se o databázi NoSQL s transakční podporou. Jedná se o databázi dokumentů, která nabízí podporu SQL a provádí ji distribuovaným způsobem.

Zní to zajímavě? Připojte se ke mně pro bližší pohled. (Úplné zveřejnění: Pracuji pro společnost Lucidworks, která zaměstnává mnoho klíčových přispěvatelů do projektu Solr.)

Potřebujete slušný stroj (nebo stačí použít instanci AWS) s ideálně 8 GB nebo více RAM. Solr najdete na //lucene.apache.org/solr. Potřebujete také Java Virtual Machine verze 8. Rozbalte / rozbalte Solr do adresáře, ujistěte se, že je nastaven JAVA_HOME a že java binární soubor je ve vaší cestě. Přejděte do adresáře, ve kterém je Solr, a zadejte bin / solr start -e cloud -noprompt. Tím se na vašem notebooku spustí cluster se dvěma uzly s ukázkovou kolekcí nazvanou gettingstarted already loaded.

Normální spuštění by prostě bylo bin / solr start -c spustit Solr v „cloudovém“ režimu. Ale pokud se chystáte kopnout do pneumatik, opravdu chcete vidět instalaci více uzlů, i když je to na vašem vlastním notebooku. Solr Cloud je způsob, jakým chcete spustit moderní instalaci Solr. Pokud začnete bez -C začnete ve starším režimu. To je špatná věc.

Dokumenty a sbírky

Solr je strukturovaná databáze dokumentů. Entity jako „Osoba“ se skládají z polí, jako je jméno, adresa a e-mail. Tyto dokumenty jsou uloženy ve sbírkách. Kolekce jsou nejbližší analogii k tabulkám v relační databázi. Na rozdíl od relační databáze však „Osoba“ může entitu zcela obsahovat, což znamená, že pokud má osoba více adres, mohou být tyto adresy uloženy v jednom dokumentu „Osoba“. V relační databázi byste potřebovali samostatnou tabulku adres.

Osoba {

"Id": "1333425",

„First_name“: „Francis“,

„Prostřední_název“: „J.“,

„Last_name“: „Underwood“,

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

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

}

Střepy, repliky a jádra

Na rozdíl od většiny relačních databází jsou data automaticky rozdělena a replikována prostřednictvím Solr Cloud. To znamená, že když zapisujete dokument do správně nakonfigurované kolekce, je distribuován do jedné z instancí Solr. To je „střep“. Dělá se to za účelem zlepšení výkonu čtení. Každý dokument je také replikován nebo zkopírován alespoň jednou (konfigurovatelně) kvůli redundanci. To znamená, že můžete přijít o instanci Solr a trpět pouze sníženým výkonem v rámci vašeho clusteru, ale bez ztráty dat.

Klastr je sada „uzlů“, což jsou instance Java Virtual Machine (JVM) se spuštěným Solr. Uzel může obsahovat více „jader“. Každé jádro je replikou logického „střepu“. Obecně jsou jádra identifikována podle kolekce, čísla fragmentu a čísla repliky zřetězeného společně jako řetězec.

Vytváření sbírky

I když existují rozhraní REST jako HTTP, stačí použít bin / solr (nebo bin / solr.cmd) příkaz pro vytváření a řízení sbírek. Pojďme použít kontroverzní téma a najdeme veřejnou datovou sadu. Získejte kopii údajů o nákladech na zdravotní péči z Data.gov. Pro jednoduchost jej vezměte jako CSV. Za předpokladu, že jste spustili Solr podle pokynů, použijte tento příkaz k vytvoření kolekce s názvem ipps:

bin / solr create_collection -d basic_configs -c ipps

Dále načtěte data do kolekce. Nejprve musíme opravit několik věcí v souboru CSV. Odstraňte všechny $ postavy. Také v horním řádku názvů polí změňte pole z mezer na podtržítka. Nechte to číst takto:

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

Pro ETL existují výkonnější nástroje než ty, které jsou zabudovány do Solru (například ten, který je součástí produktu, který moje společnost prodává), ale celkově to nebyla složitá oprava!

Než načteme jakákoli data, musíme vytvořit „schéma“, které je podobné tomu, které máte v relační databázi. Můžeme to udělat s kučera v systému Linux / Mac nebo můžete použít nástroj GUI, jako je Postman.

curl -X POST -H „Content-type: application / json“ —data-binary “{

„Add-field“: {

„Name“: „DRG_Definition“,

“Type”: ”text_general”,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_Id“,

„Type“: „plong“,

„DocValues“: true,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_Name“,

“Type”: ”text_general”,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_Street_Address“,

„Type“: „string“,

„Indexed“: false,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_City“,

„Type“: „string“,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_State“,

„Type“: „string“,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Provider_Zip_Code“,

„Type“: „string“,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Hospital_Referral_Region_Description“,

“Type”: ”text_general”,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Total_Discharges“,

„Type“: „pinta“,

„DocValues“: true,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Average_Covered_Charges“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Average_Total_Payments“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexed“: true,

„Stored“: true

  },

„Add-field“: {

„Name“: „Average_Medicare_Payments“,

„Type“: „pdouble“,

„DocValues“: true,

„Indexed“: true,

„Stored“: true

  }

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

Jedná se o názvy polí, typy polí a to, zda pole indexovat a uložit. Další informace o datových typech a celkovém schématu společnosti Solr najdete v referenční příručce.

Nyní, když máme schéma, můžeme data „zaúčtovat“ do Solru. Existuje mnoho cest, jak toho dosáhnout. Můžete použít curl nebo Postman, ale Solr obsahuje nástroj příkazového řádku, bin / post, který bude k dispozici po vybalení z krabice pro Linux a 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.cs

V systému Windows:

java -Dtype = text / csv -Dc = ipps -Dparams = "rowid = id" -jar příklad \ exampledocs \ post.jar \ Users \ acoliver \ Downloads \ Inpatient_Prospective_Payment_System__IPPS__Provider_Summary_for_the_Top_100_Diagnosis _Související_skupiny__

W00t máte data!

Dotaz na vaše data

Existují jazykové vazby pro Solr, které můžete použít pro Java nebo Python, nebo pokud jste více vývojáři v oblasti napájení, můžete použít jedno pro PHP. Nebo stačí použít curl nebo Postman nebo váš prohlížeč.

Vložte toto do adresního řádku:

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

Tato adresa URL je jednoduchý dotaz, který vrací 10 nejrelevantnějších výsledků. Můžete změnit stránkování a v referenční příručce se dozvědět více o vyhledávacím jazyce společnosti Solr's Solr a dokonce i alternativních analyzátorech dotazů. Pokud chcete vidět stejnou věc v XML, můžete to nakonfigurovat.

Možná chcete udělat něco trochu pokročilejšího. Níže jsou uvedeny postupy ve městě, ve kterém žiji:

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

Můžete jít mnohem dále a dělat další souhrny a výpočty a fuzzy shody.

Solr administrace

Někteří z vás jsou jako „Dobrý bože, příkazový řádek mě děsí!“ Takže to je v pořádku, Solr má grafické uživatelské rozhraní. Musím // localhost: 8983 / solr a vidět tuto krásu:

Pokud na boku vyberete svou sbírku, můžete dokonce přejít na obrazovku, která vám umožní vyplnit parametry dotazu:

Pokud vás tato obrazovka bolí, můžete jednoduše přejít na // localhost: 8983 / solr / ipps / browse.

Udělali jsme jednoduché textové dotazy. Můžete také provádět rozsahy a prostorové vyhledávání. Pokud pro vás třídění podle „relevance“ nefunguje, můžete udělat pokročilejší výrazy a nechat Solr vrátit věci „tak, jak jsou nalezeny“, podobně jako to dělá RDBMS. Můžete třídit různá pole a filtrovat podle kategorií. Můžete jej dokonce mít „naučit se hodnotit“ - schopnost strojového učení, která umožňuje společnosti Solr „naučit se“, co si uživatelé myslí, že je nejrelevantnějším výsledkem. Opravdu jsme jen poškrábali povrch.

Proč Solr?

Pokud potřebujete vyhledávač, můžete se rozhodnout použít Solr. Je to však také redundantní distribuovaná databáze dokumentů, která nabízí SQL (po vybalení z krabice) pro ty, kteří se chtějí připojit k nástrojům, jako je Tableau. Je rozšiřitelný v Javě (a dalších jazycích JVM), a přesto s rozhraním podobným RESTu na něj můžete snadno mluvit JSON nebo XML.

Solr nemusí být vaší nejlepší volbou, pokud máte jednoduchá data, která vyhledáváte pomocí klíče a děláte většinou zápisy. Solr má příliš mnoho instalatérských prací na to, aby dělal větší věci, aby to bylo stejně efektivní jako úložiště klíč-hodnota.

Solr je jasná volba, pokud je vaše vyhledávání velmi textově orientované. Existují však i jiné, ne tak zjevné případy, kdy by to mohla být dobrá volba, jako pro prostorové vyhledávání u všech lidí, jejichž mobilní telefony jste hackli, a sledovat jejich polohu. Jen říkám, že i vy, pane Putine, si možná budete chtít vybrat Solra.

Bez ohledu na to si pamatujte, že přátelé nenechají přátele dělat SQL bla jako '% věcí' dotazy.

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