Raziskovalni dokument o iskalniku
Uvod v Elasticsearch*
Elasticsearch je porazdeljen iskalni in analitični pogon v realnem času. Pomaga vam obdelovati obsežne podatke hitreje kot kadarkoli prej.
Uporablja se lahko za iskanje po celotnem besedilu, strukturirano iskanje in analitiko, seveda pa lahko združite vse tri.
Elasticsearch je iskalnik, zgrajen na iskalniku za polno besedilo Apache Lucene™, ki velja za najnaprednejši in najučinkovitejši, polno funkcionalni odprtokodni iskalni okvir, ki je danes na voljo.
A Lucene je le ogrodje, in da bi v celoti izkoristili njegove funkcije, morate uporabiti JAVA in ga vključiti v svoj program. Potrebno je veliko učenja, da razumeš, kako deluje, in Lucene je res zapleten.
Elasticsearch uporablja Lucene kot svoj notranji pogon, vendar pri iskanju po celotnem besedilu potrebujete le enoten API, ne da bi razumeli zapletena načela delovanja Lucene.
Seveda Elasticsearch ni le tako preprost kot Lucene, vključuje ne le funkcije iskanja po celotnem besedilu, ampak lahko opravlja tudi naslednje naloge:
- Distribuirano shranjevanje datotek v realnem času in indeksiranje vsakega polja, da je mogoče iskati.
- Porazdeljeni iskalnik z analitiko v realnem času.
- Lahko se razširi na stotine strežnikov za obdelavo petabajtov strukturiranih ali nestrukturiranih podatkov.
Ker je toliko funkcij integriranih v enem strežniku, lahko enostavno komunicirate z ES-ovim RESTful API-jem preko odjemalca ali katerega koli od vaših priljubljenih programskih jezikov.
Začetek z Elasticsearchom je zelo preprost. Vsebuje veliko zelo razumnih privzetih nastavitev, kar je dober način za začetnike, da se izognejo soočanju s kompleksnimi teorijami takoj, ko začnejo.
Nameščen je in pripravljen za uporabo ter je lahko zelo produktiven z majhnimi stroški učenja.
Ko boste izvedeli več, lahko izkoristite tudi naprednejše funkcije Elasticsearcha, celoten pogon pa je mogoče prilagodljivo konfigurirati. Elasticsearch lahko prilagodite svojim potrebam.
Primeri uporabe:
- Wikipedia uporablja Elasticsearch za iskanje po celotnem besedilu in označevanje ključnih besed, pa tudi za iskalne predloge, kot sta iskanje kot tipkanje in did-you-mislil.
- The Guardian uporablja Elasticsearch za obdelavo dnevnikov obiskovalcev, da so uredniki lahko v realnem času obveščeni o odzivih javnosti na različne članke.
- StackOverflow združuje iskanje po celotnem besedilu z geolokacijo in relevantnimi informacijami, da ponudi predstavitev vprašanj, povezanih z bolj podobnimi vprašanji.
- GitHub uporablja Elasticsearch za pridobitev več kot 130 milijard vrstic kode.
- Vsak dan ga Goldman Sachs uporablja za indeksiranje 5TB podatkov, številne investicijske banke pa ga uporabljajo za analizo gibanj borz.
Elasticsearch ni namenjen le velikim podjetjem, temveč je pomagal tudi mnogim zagonskim podjetjem, kot sta DataDog in Klout, razširiti njihove zmogljivosti.
Prednosti in slabosti Elasticsearch**:
zasluga
- Elasticsearch je distribuiran. Druge komponente niso potrebne, distribucija pa poteka v realnem času, znana kot "potisna replikacija".
- Elasticsearch v celoti podpira skoraj realnočasovno iskanje z Apache Lucene.
- Upravljanje večnajemnosti ne zahteva posebne konfiguracije, medtem ko Solr zahteva bolj napredne nastavitve.
- Elasticsearch uporablja koncept Gateway, da olajša varnostno kopiranje.
- Vsako vozlišče tvori enakovredno omrežno strukturo, in ko nekatera vozlišča odpovejo, so druga vozlišča samodejno dodeljena za delo namesto njih.
Pomanjkljivost
- Samo en razvijalec (trenutna organizacija Elasticsearch na GitHubu je več kot to, saj ima že precej aktivne vzdrževalce)
- Ni dovolj samodejno (ni primerno za trenutni novi Index Warmup API)
O Solr*
Solr (izgovorjava "solar") je odprtokodna platforma za iskanje podjetij za projekt Apache Lucene. Njegove glavne funkcije vključujejo iskanje po celotnem besedilu, označevanje zadetkov, fasetno iskanje, dinamično združevanje, integracijo baz podatkov in obdelavo bogatega besedila (npr. Word, PDF). Solr je zelo razširljiv in omogoča porazdeljeno iskanje ter replikacijo indeksov. Solr je najbolj priljubljen iskalnik za podjetja, Solr4 pa dodaja tudi podporo za NoSQL.
Solr je samostojen strežnik za iskanje polnega besedila, napisan v Javi, ki deluje na servlet vsebniku, kot sta Apache Tomcat ali Jetty. Solr uporablja iskalno knjižnico Lucene Java kot jedro za indeksiranje in iskanje v polnem besedilu ter ima REST-podobne HTTP/XML in JSON API-je. Solrjeve zmogljive zunanje konfiguracijske zmogljivosti omogočajo enostavno prilagajanje številnim vrstam aplikacij brez Java kodiranja. Solr ima arhitekturo vtičnikov, ki podpira naprednejše prilagoditve.
Zaradi združitve projektov Apache Lucene in Apache Solr leta 2010 sta bila oba projekta ustvarjena in implementirana s strani iste razvojne ekipe Apache Software Foundation. Kar zadeva tehnologijo ali izdelke, sta Lucene/Solr ali Solr/Lucene enaka.
Prednosti in slabosti Solr:
zasluga
- Solr ima večjo in bolj zrelo skupnost uporabnikov, razvijalcev in sodelavcev.
- Podpora dodajanju indeksov v več formatih, kot so HTML, PDF, programska oprema Microsoft Office in v formatih navadnega besedila, kot so JSON, XML, CSV itd.
- Solr je razmeroma zrel in stabilen.
- Iskanje med indeksiranjem ni upoštevano, hitrost pa je hitrejša.
Pomanjkljivost
- Ko je indeks vzpostavljen, se učinkovitost iskanja zmanjša, učinkovitost iskanja indeksov v realnem času pa ni visoka.
Elasticsearch proti Solr*
Solr je hitrejši že pri iskanju obstoječih podatkov.
Pri indeksiranju v realnem času Solr povzroča blokiranje IO in slabšo zmogljivost poizvedb, kar ima Elasticsearch jasno prednost.
Ko se količina podatkov povečuje, Solrova učinkovitost iskanja postaja nižja, medtem ko se Elasticsearch bistveno ne spreminja.
Povzemimo, Solrova arhitektura ni primerna za aplikacije iskanja v realnem času.
Testiranje proizvodnje v resničnem svetu*
Spodnja slika prikazuje 50-kratno povečanje povprečne hitrosti poizvedb po prehodu s Solr na Elasticsearch.
Povzetek primerjave Elasticsearch in Solr
- Oba sta enostavna za namestitev;
- Solr uporablja Zookeeper za distribuirano upravljanje, medtem ko Elasticsearch sam upravlja distribuirano orkestracijo;
- Solr podpira več formatov podatkov, medtem ko Elasticsearch podpira le JSON datotečne formate;
- Solr uradno ponuja več funkcij, medtem ko se Elasticsearch sam bolj osredotoča na osnovne funkcije, napredne funkcije pa večinoma zagotavljajo vtičniki tretjih oseb.
- Solr presega Elasticsearch v tradicionalnih iskalnih aplikacijah, vendar je bistveno manj učinkovit kot Elasticsearch pri obdelavi aplikacij za iskanje v realnem času.
- Solr je zmogljiva rešitev za tradicionalne iskalne aplikacije, vendar je Elasticsearch bolj primeren za nastajajoče aplikacije za iskanje v realnem času.
Druge odprtokodne rešitve iskalnikov na osnovi Lucene*
1: Uporabite Lucene neposredno
Opomba: Lucene je JAVA iskalna knjižnica, ki sama po sebi ni popolna rešitev in zahteva dodatno razvojno delo.
Prednosti: Zrela rešitev z mnogimi uspešnimi primeri. Apache vrhunski projekti, ki še naprej hitro napredujejo. Velika in aktivna razvojna skupnost, veliko število razvijalcev. Gre le za knjižnico razredov, z dovolj prostora za prilagajanje in optimizacijo: po preprosti prilagoditvi lahko zadosti večini pogostih potreb; Optimizirano za podporo 1 milijardi+ iskanj.
Slabosti: Zahteva dodatni razvojni trud. Vse razširjanje, distribucijo, zanesljivost itd. moraš implementirati sam; V nerealnem času obstaja časovna zamik med indeksiranjem in iskanjem, zato je treba še izboljšati razširljivost trenutnega iskalnega sistema "Lucene Near Real Time search"
Prijava do hiperpovezave je vidna.
2: Katta
Opomba: Lucene-based podpora je distribuirana, razširljiva, odporna na napake in skoraj v realnem času iskalna shema.
Prednosti: Distribuirano takoj iz škatle skupaj s Hadoopom. Ima mehanizem za skaliranje in odpornost na napake.
Slabosti: Gre le za iskalno rešitev, indeksiranje pa morate vseeno implementirati sami. Kar zadeva iskalno funkcijo, so izpolnjene le najbolj osnovne potrebe. Zgodb o uspehu je manj, zrelost projekta pa je nekoliko nižja. Ker mora podpirati distribucijo, bo težko prilagoditi za nekatere zahtevne zahteve po poizvedbah.
Prijava do hiperpovezave je vidna.
3: Hadoop prispevk/indeks
Opomba: Map/Reduce način, distribuirana rešitev za indeksiranje, se lahko uporablja s Katto.
Prednosti: Porazdeljeno indeksiranje in razširljivost.
Slabosti: Samo shema indeksiranja, ne iskalna implementacija. Deluje v serijskem načinu s slabo podporo za iskanje v realnem času.
Prijava do hiperpovezave je vidna.
4: LinkedInova odprtokodna rešitev
Opis: Vrsta rešitev, ki temeljijo na Lucene, vključno z Zoie za iskanje skoraj v realnem času, Bobo za iskanje po fasetah, Decomposer za algoritme strojnega učenja, Krati za repozitorije za povzetke, Sensei za ovijanje shem baz podatkov in še več
Prednosti: Preverjena rešitev, ki podpira distribuirano, razširljivo in bogato implementacijo funkcij
Slabosti: Pretesna povezanost s podjetjem LinkedIn in slaba prilagodljivost
Prijava do hiperpovezave je vidna.
5: Lucandra
Opomba: Na podlagi Lucene indeks obstaja v podatkovni bazi Cassandra
Prednosti: Oglejte prednosti Cassandre
Slabosti: Oglejte si slabosti Cassandre. Poleg tega je to le demo in ni bil temeljito preverjen
Prijava do hiperpovezave je vidna.
6:HBasene
Opomba: Na podlagi Lucene indeks obstaja v bazi podatkov HBase
Koristi: Oglejte prednosti HBase
Slabosti: Glejte na slabosti HBase. Prav tako so v implementaciji lucene izrazi shranjeni kot vrstice, medtem ko so seznami objav, ki ustrezajo posameznemu izrazu, shranjeni kot stolpci. Ko se število seznamov objav za en sam izraz povečuje, bo hitrost poizvedbe močno prizadeta
Prijava do hiperpovezave je vidna.
7: Xunsearch
Opomba: Xunsearch uporablja strukturirano hierarhično zasnovo, ki vključuje back-end storitve in front-end razvojne pakete, z jasnimi hierarhijami in brez presečišč. Backend je demon, napisan v C/C++, medtem ko frontend uporablja PHP, najbolj priljubljen skriptni jezik, ki je bolj priročen za spletne iskalne projekte. Za podrobnosti glejte Arhitekturno oblikovanje.
Prijava do hiperpovezave je vidna.
|