Povlačenje i NRT pretraživanje u SolrCloud-u

1. Pregled

Solr je jedno od najpopularnijih rješenja za pretraživanje temeljeno na lucenu. Brz je, distribuiran, robustan, fleksibilan i iza sebe ima aktivnu zajednicu programera. SolrCloud je nova, distribuirana verzija Solra.

Jedna od njegovih ključnih značajki ovdje je pretraga gotovo u stvarnom vremenu (NRT), tj. dokumenti su dostupni za pretraživanje kao uskoro kako su indeksirane.

2. Indeksiranje u SolrCloud

Kolekcija u Solru sastoji se od više krhotina, a svaka krhotina ima razne replike. Jedna od replika krhotine odabire se kao voditeljica za tu krhotinu kada se kreira kolekcija:

  • Kada klijent pokuša indeksirati dokument, dokumentu se prvo dodijeli krhotina na temelju raspršivanja iskaznica dokumenta
  • Klijent dobiva URL voditelja te krhotine od čuvara zoološkog vrta i na kraju se na taj URL upućuje zahtjev za indeksom
  • Vođa krhotina lokalno indeksira dokument prije slanja u replike
  • Jednom kad voditelj primi potvrdu od svih aktivnih i oporavljajućih se replika, vraća potvrdu u klijentsku aplikaciju za indeksiranje

Kad indeksiramo dokument u Solru, on ne ide izravno u indeks. Napisano je u onome što se naziva a tlog (dnevnik transakcija). Solr koristi dnevnik transakcija kako bi osigurao da se dokumenti ne izgube prije nego što budu počinjeni, u slučaju pada sustava.

Ako se sustav sruši prije nego što se dokumenti u zapisniku transakcija izvrše, tj. Nastave na disku, zapisnik transakcija reproducira se kad se sustav vrati, što dovodi do nula gubitka dokumenata.

Svaki zahtjev za indeksom / ažuriranjem bilježi se u dnevnik transakcija koji nastavlja rasti dok ne izvršimo predavanje.

3. Uključuje se u SolrCloud

A počiniti operacija znači finaliziranje promjene i zadržavanje te promjene na disku. SolrCloud pruža dvije vrste operacija urezivanja, naime. počiniti i meko počiniti.

3.1. Obvezivanje (teško predavanje)

Povlačenje ili tvrdo urezivanje je ono u kojem Solr izbacuje na disk sve neprihvaćene dokumente iz dnevnika transakcija. Aktivni zapisnik transakcija se obrađuje, a zatim se otvara nova datoteka dnevnika transakcija.

Također osvježava komponentu koja se naziva pretraživač tako da novopredani dokumenti postanu dostupni za pretraživanje. Pretraživač se može smatrati prikazom samo za čitanje svih predanih dokumenata u indeksu.

Operaciju predavanja može izvršiti isključivo klijent pozivom na počiniti API:

Niz zkHostString = "zkServer1: 2181, zkServer2: 2181, zkServer3: 2181 / solr"; SolrClient solr = novi CloudSolrClient.Builder () .withZkHost (zkHostString) .build (); SolrInputDocument doc1 = novi SolrInputDocument (); doc1.addField ("id", "123abc"); doc1.addField ("datum", "14.10.2017."); doc1.addField ("knjiga", "Ubiti pticu rugalicu"); doc1.addField ("autor", "Harper Lee"); solr.add (doc1); solr.commit ();

Jednako tako, može se automatizirati kao autoCommit navođenjem u solrconfig.xml datoteku, pogledajte odjeljak 3.4.

3.2. SoftCommit

Softcommit je dodan od Solr 4 nadalje, prvenstveno da bi podržao NRT značajku SolrCloud. To je mehanizam za omogućavanje pretraživanja dokumenata u gotovo stvarnom vremenu preskakanjem skupih aspekata teških obveza.

Tijekom softcommit-a zapisnik transakcija nije skraćen, on nastavlja rasti. Međutim, otvara se novi pretraživač, što čini dokumente od zadnjeg softcommit-a vidljivim za pretraživanje. Također, neke su predmemorije najviše razine u Solru onesposobljene, pa to nije potpuno besplatan rad.

Kada odredimo maxTime za softcommit kao 1000, to znači da će dokument biti dostupan u upitima najkasnije 1 sekundu od trenutka kada je indeksiran.

Ova značajka daje SolrCloud-u moć pretraživanja gotovo u stvarnom vremenu, jer se novi dokumenti mogu učiniti pretraživima čak i bez njihovog predavanja. Softcommit se može pokrenuti samo kao autoSoftCommit navođenjem u solrconfig.xml datoteku, pogledajte odjeljak 3.4.

3.3. Autocommit i Autosoftcommit

The solrconfig.xml datoteka je jedna od najvažnijih konfiguracijskih datoteka u programu SolrCloud. Generira se u vrijeme stvaranja kolekcije. Kako bi se omogućilo autoCommit ili autoSoftCommit, moramo ažurirati sljedeće odjeljke u datoteci:

 10000 30000 istinito 6000 1000 

maxTime: Broj milisekundi od najranijeg nezauzetog ažuriranja nakon kojeg bi se trebao dogoditi sljedeći predaj / softcommit.

maxDocs: Broj ažuriranja koja su se dogodila od zadnjeg urezivanja i nakon kojih bi se trebao dogoditi sljedeći predaj / softcommit.

openSearcher: Ovo svojstvo govori Solru hoće li otvoriti novi pretraživač nakon operacije urezivanja ili ne. Ako jest pravi, nakon urezivanja, stari pretraživač se zatvara i otvara novi pretraživač, čineći predani dokument vidljivim za pretraživanje, Ako je lažno, dokument neće biti dostupan za pretraživanje nakon urezivanja.

4. U blizini pretraživanja u stvarnom vremenu

Pretraživanje u blizini u stvarnom vremenu postiže se u Solru koristeći kombinaciju predavanja i softcommit-a. Kao što je već spomenuto, kada se dokument doda u Solr, neće biti vidljiv u rezultatima pretraživanja dok se ne preda indeksu.

Uobičajene obveze skupe su, zbog čega su blage obveze korisne. No, s obzirom da softcommit ne zadržava dokumente, moramo postaviti autocommit maxTime interval (ili maxDocs) na razumnu vrijednost, ovisno o opterećenju koje očekujemo.

4.1. G u stvarnom vremenuets

Postoji još jedna značajka koju pruža Solr, a koja je zapravo u stvarnom vremenu - dobiti API. The dobiti API nam može vratiti dokument koji još nije čak ni mekan.

Pretražuje izravno u zapisnicima transakcija ako dokument nije pronađen u indeksu. Da bismo mogli otpustiti a dobiti API poziv, odmah nakon povratka poziva indeksa, i dalje ćemo moći dohvatiti dokument.

Međutim, kao i sve predobre stvari, i ovdje postoji kvaka. Moramo proći iskaznica dokumenta u dobiti API poziv. Naravno, možemo pružiti i druge upite za filtriranje zajedno s iskaznica, ali bez iskaznica, poziv ne radi:

// localhost: 8985 / solr / myCollection / get? id = 1234 & fq = name: baeldung

5. Zaključak

Solr nam pruža popriličnu fleksibilnost u pogledu podešavanja NRT mogućnosti. Da bismo poslužitelju izvukli najbolje performanse, moramo eksperimentirati s vrijednostima predavanja i softcommitsa, na temelju našeg slučaja upotrebe i očekivanog opterećenja.

Ne bismo trebali zadržavati interval predavanja predugo, inače će naš dnevnik transakcija narasti do znatne veličine. Ipak, ne bismo trebali izvršavati svoje softcommissions previše često.

Također se savjetuje da izvršimo odgovarajuće ispitivanje performansi našeg sustava prije nego što krenemo u proizvodnju. Trebali bismo provjeriti postaju li dokumenti dostupni za pretraživanje unutar željenog vremenskog intervala.