Elasticsearch Multi-Get

Elasticsearch Multi Get



Ovaj članak govori o tome kako koristiti Elasticsearch multi-get API za dohvaćanje više JSON dokumenata na temelju njihovih ID-ova. Osim toga, Elasticsearch vam omogućuje korištenje jednog upita za dobivanje dokumenata za dohvaćanje dokumenata iz indeksa koristeći samo ID-ove dokumenata.

Idemo istražiti.







Sintaksa zahtjeva

Slijedi sintaksa za Elasticsearch multi-get API:



GET /_mget
GET / /_mget

Multi-get API podržava više indeksa što vam omogućuje dohvaćanje dokumenata čak i ako nisu u istom indeksu.



Zahtjev podržava sljedeće parametre staze:





  1. – Naziv indeksa iz kojeg se dohvaćaju dokumenti kako je navedeno njihovim ID-ovima.

Također možete navesti druge parametre upita kao što je prikazano:

  1. Prednost – Definira preferirani čvor ili fragment.
  2. Stvarno vrijeme – Ako je postavljeno na true, operacija se izvodi u stvarnom vremenu.
  3. Osvježiti – Prisilno pokreće operaciju osvježavanja ciljnih fragmenata prije dohvaćanja navedenih dokumenata.
  4. Usmjeravanje – Vrijednost koja se koristi za usmjeravanje operacija na određeni shard.
  5. Store_polja – Dohvaća polja dokumenta pohranjena u indeksu umjesto u dokumentu.
  6. _izvor – Booleova vrijednost koja definira treba li zahtjev vratiti polje _source ili ne.

Upit zahtijeva tijelo koje uključuje sljedeće vrijednosti:



  1. dokumenti – Određuje dokumente koje želite dohvatiti. Osim toga, ovaj odjeljak podržava sljedeće atribute:
    • _iskaznica – Jedinstveni ID ciljanog dokumenta.
    • _indeks – Indeks koji sadrži ciljni dokument.
    • Usmjeravanje – Ključ za primarni shard dokumenta.
    • _izvor – Ako je istina, uključuje sva izvorna polja; inače ih isključuje.
    • _pohranjena_polja – Pohranjena_polja koja želite uključiti.
  2. ID-ovi – ID-ove dokumenata koje želite dohvatiti.

Primjer 1: Dohvaćanje više dokumenata iz istog indeksa

Sljedeći primjer pokazuje kako koristiti Elasticsearch multi-get API za dohvaćanje dokumenata s određenim ID-ovima iz Netflix indeksa:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: aplikacija/json' -d'
{
'dokumenti': [
{
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_id': 'W3wnVoMBck2AEzXPytlJ'
}
]
}'

Zadani zahtjev trebao bi dohvatiti dokumente s navedenim ID-ovima iz indeksa Netflix. Rezultirajući izlaz je kao što je prikazano:

{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_verzija': 1,
'_seq_no': 0,
'_primarni_pojam': 1,
'pronađeno': istina,
'_izvor': {
'duration': '90 min',
'listed_in': 'Dokumentarci',
'country': 'Sjedinjene Države',
'date_added': '25. rujna 2021.',
'show_id': 's1',
'redatelj': 'Kirsten Johnson',
'godina_izlaska': 2020.,
'ocjena': 'PG-13',
'description': 'Dok se njezin otac bliži kraju života, redateljica Kirsten Johnson inscenira njegovu smrt na inventivne i komične načine kako bi im pomogla oboje da se suoče s neizbježnim.',
'type': 'Film',
'title': 'Dick Johnson je mrtav'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2AEzXPytlJ',
'_verzija': 1,
'_seq_no': 12,
'_primarni_pojam': 1,
'pronađeno': istina,
'_izvor': {
'country': 'Njemačka, Češka',
'show_id': 's13',
'redatelj': 'Christian Schwochow',
'godina_izlaska': 2021.,
'rating': 'TV-MA',
'opis': 'Nakon što je većina njezine obitelji ubijena u terorističkom bombaškom napadu, mlada žena je nesvjesno namamljena da se pridruži istoj skupini koja ih je ubila.',
'type': 'Film',
'title': 'Ja sam Karl',
'duration': '127 min',
'listed_in': 'Drame, međunarodni filmovi',
'glumačka postava': 'Luna Wedler, Jannis Niewöhner, Milan Peschel, Edin Hasanović, Anna Fialová, Marlon Boess, Victor Boccard, Fleur Geffrier, Aziz Dyab, Mélanie Fouché, Elizaveta Maximová',
'date_added': '23. rujna 2021.'
}
}
]

}

Također možemo pojednostaviti zahtjev stavljanjem ID-ova dokumenata u jednostavan niz kao što je prikazano u nastavku:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: aplikacija/json' -d'
{
'ids': ['T3wnVoMBck2AEzXPytlJ', 'W3wnVoMBck2AEzXPytlJ']
}'

Prethodni zahtjev trebao bi izvesti sličnu radnju.

Primjer 2: Dohvaćanje dokumenata iz višestrukih indeksa

U sljedećem primjeru, zahtjev dohvaća više dokumenata iz različitih indeksa kao što je prikazano:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: izvješćivanje' -H 'Vrsta sadržaja: aplikacija/json' -d'
{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_index': 'disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
}'

Rezultirajući izlaz je kao što je prikazano:

Primjer 3: Izuzimanje određenih polja

Možemo isključiti određena polja iz određenog zahtjeva pomoću parametara source_include i source_exclude.

Primjer je kao što je prikazano:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: izvješćivanje' -H 'Vrsta sadržaja: aplikacija/json' -d'
{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_izvor': netočno
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_izvor': {
'include': [ 'listed_in', 'release_year', 'title' ],
'exclude': [ 'description', 'type', 'date_added' ]
}
}
]

}'

Zadani zahtjev koristi uključivanje izvora i isključivanje kako bi odredio koja polja želite dohvatiti u određenom dokumentu.

Rezultirajući izlaz je kao što je prikazano:

Zaključak

U ovom smo postu raspravljali o osnovama rada s Elasticsearch multi-get API-jem koji vam omogućuje dohvaćanje više dokumenata iz različitih izvora na temelju njihovih ID-ova. Slobodno istražite druge dokumente za više informacija.

Sretno kodiranje!