Kada mijenjate podatke u indeksu Elasticsearch, to može dovesti do zastoja jer se funkcija dovršava i podaci se reindeksiraju.
Ovaj vodič će vam pružiti puno bolji način ažuriranja indeksa bez napuštanja postojećeg izvora podataka. Korištenjem API-ja za ponovno indeksiranje Elasticsearch kopirat ćemo podatke iz određenog izvora u drugi.
Krenimo.
BILJEŠKA: Prije nego što započnemo, operacije ponovnog indeksiranja su velike resurse, posebno na velikim indeksima. Da biste smanjili vrijeme potrebno za ponovno indeksiranje, onemogućite number_of_replicas postavljanjem vrijednosti na 0 i omogućite ih nakon završetka postupka.
Omogući polje _Source
Operacija ponovnog indeksiranja zahtijeva omogućavanje polja izvora na svim dokumentima u indeksu izvora. Imajte na umu da se izvorno polje ne indeksira i ne može se pretraživati, ali je korisno za razne zahtjeve.
Omogućite polje _Source dodavanjem unosa kao što je prikazano dolje:
PUT indeks_1“Preslikavanja”:
"_izvor":
"omogućeno": true
Ponovno indeksirajte sve dokumente
Da bismo indeksirali dokumente, moramo navesti izvor i odredište. Izvor i odredište mogu biti postojeći indeks, pseudonim indeksa i tokovi podataka. Možete koristiti indekse iz lokalnog ili udaljenog klastera.
BILJEŠKA: Da bi se indeksiranje uspješno dogodilo, i izvor i odredište ne mogu biti slični. Odredište morate konfigurirati prema potrebi prije ponovnog indeksiranja, jer ne primjenjuje postavke iz izvora ili bilo kojeg povezanog predloška.
Opća sintaksa ponovnog indeksiranja je sljedeća:
POST / _reindexKrenimo od stvaranja dva indeksa. Prvi će biti izvor, a drugi odredište.
PUT / izvorni_indeks"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliases":
"alias_1": ,
"alias_2":
"filter": "pojam":
"korisnik.id ":" kibana "
, "usmjeravanje": "1"
Naredba cURL je:
curl -XPUT "http: // localhost: 9200 / source_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "preslikavanja" : "_source": "enabled": true, "aliases": "alias_1": , "alias_2": "filter": "term": "korisnik.id ":" kibana "," usmjeravanje ":" 1 " 'Sada za odredišni indeks (možete upotrijebiti gornju naredbu i promijeniti nekoliko stvari ili upotrijebiti dolje navedenu):
PUT / odredišni_indeks"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "aliases":
"alias_3": ,
"alias_4":
"filter": "pojam":
"korisnik.id ":" kibana "
, "usmjeravanje": "1"
Kao i uvijek, korisnici cURL-a mogu koristiti naredbu:
curl -XPUT "http: // localhost: 9200 / destination_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "mappings" : "_source": "enabled": true, "aliases": "alias_3": , "alias_4": "filter": "term": "korisnik.id ":" kibana "," usmjeravanje ":" 1 " 'Sada imamo indekse koje želimo koristiti, a zatim možemo prijeći na ponovno indeksiranje dokumenata.
Razmotrite zahtjev u nastavku koji kopira podatke iz source_index u destination_index:
OBJAVI _reindex"Izvor":
"index": "source_index"
,
"dest":
"index": "odredište_indeks"
Naredba cURL za ovo je:
curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Content-Type: application / json' -d '"source": "index": ".kibana "," dest ": " index ":" odredište_index " 'Izvršavanje ove naredbe treba vam dati detaljne informacije o provedenoj operaciji.
BILJEŠKA: Source_index trebao bi imati podatke.
"uzeo": 2836,
"timed_out": netačno,
"ukupno": 13059,
"ažurirano": 0,
"stvoreno": 13059,
"izbrisano": 0,
"šarže": 14,
"version_conflicts": 0,
"petlje": 0,
"ponovni pokušaji":
"skupno": 0,
"pretraga": 0
,
"throttled_millis": 0,
"request_per_second": -1.0,
"throttled_until_millis": 0,
"neuspjesi": []
Provjera statusa ponovnog indeksiranja
Status operacija ponovnog indeksiranja možete vidjeti jednostavnim korištenjem _tasks. Na primjer, razmotrite zahtjev u nastavku:
DOBITI / _zadatke?detaljno = true & actions = * reindex & group_by = roditeljiNaredba cURL je:
curl -XGET "http: // localhost: 9200 / _tasks?detaljno = true & actions = * reindex & group_by = roditelji "To bi vam trebalo dati detaljne informacije o postupku ponovnog indeksiranja kako je prikazano u nastavku:
"zadaci":
"FTd_2iXjSXudN_Ua4tZhHg: 51847":
"čvor": "FTd_2iXjSXudN_Ua4tZhHg",
"id": 51847,
"type": "transport",
"action": "indeksi: podaci / pisanje / ponovni indeks",
"status":
"ukupno": 13059,
"ažurirano": 9000,
"stvoreno": 0,
"izbrisano": 0,
"serije": 10,
"version_conflicts": 0,
"petlje": 0,
"ponovni pokušaji":
"skupno": 0,
"pretraga": 0
,
"throttled_millis": 0,
"request_per_second": -1.0,
"throttled_until_millis": 0
,
"description": "reindex iz [source_index] u [destination_index] [_ doc]",
"vrijeme_početka_u_milisu": 1611247308063,
"run_time_in_nanos": 2094157836,
"Cancellable": istina,
"zaglavlja":
Zaključak
Pokrili smo sve što trebate znati o korištenju API-ja za ponovno indeksiranje Elasticsearch za kopiranje dokumenata iz jednog indeksa (izvor) u drugi (odredište). Iako API za ponovno indeksiranje sadrži još nešto, ovaj vodič trebao bi vam pomoći da započnete.