Elasticsearch Multi-Get

Elasticsearch Multi Get



Ta članek govori o tem, kako uporabiti Elasticsearch multi-get API za pridobivanje več dokumentov JSON na podlagi njihovih ID-jev. Poleg tega vam Elasticsearch omogoča uporabo ene same poizvedbe za pridobivanje dokumentov iz indeksov z uporabo samo ID-jev dokumentov.

Raziskujmo.







Sintaksa zahteve

Spodaj je sintaksa za Elasticsearch multi-get API:



GET /_mget
GET / /_mget

Multi-get API podpira več indeksov, kar vam omogoča pridobivanje dokumentov, tudi če niso v istem indeksu.



Zahteva podpira naslednje parametre poti:





  1. – Ime indeksa, iz katerega želite pridobiti dokumente, kot jih določajo njihovi ID-ji.

Določite lahko tudi druge parametre poizvedbe, kot je prikazano:

  1. Prednost – Določa prednostno vozlišče ali drobec.
  2. V realnem času – Če je nastavljeno na true, se operacija izvaja v realnem času.
  3. Osveži – Prisili operacijo, da osveži ciljne drobce, preden pridobi podane dokumente.
  4. Usmerjanje – Vrednost, ki se uporablja za usmerjanje operacij na določen delček.
  5. Store_fields – Pridobi polja dokumenta, shranjena v indeksu, namesto v dokumentu.
  6. _vir – Logična vrednost, ki določa, ali naj zahteva vrne polje _source ali ne.

Poizvedba zahteva telo, ki vključuje naslednje vrednosti:



  1. dokumenti – Določa dokumente, ki jih želite pridobiti. Poleg tega ta razdelek podpira naslednje atribute:
    • _id – Enolični ID ciljnega dokumenta.
    • _index – Indeks, ki vsebuje ciljni dokument.
    • Usmerjanje – Ključ za primarni del dokumenta.
    • _vir – Če je res, vključuje vsa izvorna polja; sicer jih izključuje.
    • _shranjena_polja – Shranjena_polja, ki jih želite vključiti.
  2. Ids – ID-ji dokumentov, ki jih želite pridobiti.

1. primer: pridobite več dokumentov iz istega indeksa

Naslednji primer prikazuje, kako uporabiti Elasticsearch multi-get API za pridobivanje dokumentov z določenimi ID-ji iz indeksa Netflix:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d'
{
'dokumenti': [
{
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_id': 'W3wnVoMBck2AEzXPytlJ'
}
]
}'

Dana zahteva bi morala pridobiti dokumente z navedenimi ID-ji iz indeksa Netflix. Končni izhod je prikazan:

{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_različica': 1,
'_seq_no': 0,
'_primarni_term': 1,
'najdeno': res,
'_vir': {
'trajanje': '90 min',
'listed_in': 'Dokumentarci',
'država': 'Združene države',
'date_added': '25. september 2021',
'show_id': 's1',
'režiser': 'Kirsten Johnson',
'leto_izdaje': 2020,
'ocena': 'PG-13',
'description': 'Ko se njen oče bliža koncu svojega življenja, režiserka Kirsten Johnson uprizori njegovo smrt na domiselne in komične načine, da bi obema pomagala soočiti se z neizogibnim.',
'type': 'Film',
'title': 'Dick Johnson je mrtev'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2AEzXPytlJ',
'_različica': 1,
'_seq_no': 12,
'_primarni_term': 1,
'najdeno': res,
'_vir': {
'država': 'Nemčija, Češka',
'show_id': 's13',
'režiser': 'Christian Schwochow',
'leto_izdaje': 2021,
'rating': 'TV-MA',
'description': 'Potem ko je večina njene družine umorjena v terorističnem bombnem napadu, je mlada ženska nevede zvabljena, da se pridruži prav skupini, ki jih je ubila.',
'type': 'Film',
'naslov': 'Jaz sem Karl',
'trajanje': '127 min',
'listed_in': 'Drame, mednarodni filmi',
'igralci': '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. september 2021'
}
}
]

}

Zahtevo lahko poenostavimo tudi tako, da ID-je dokumentov postavimo v preprosto matriko, kot je prikazano v nadaljevanju:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d'
{
'ids': ['T3wnVoMBck2AEzXPytlJ', 'W3wnVoMBck2AEzXPytlJ']
}'

Prejšnja zahteva bi morala izvesti podobno dejanje.

2. primer: pridobite dokumente iz več indeksov

V naslednjem primeru zahteva pridobi več dokumentov iz različnih indeksov, kot je prikazano:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d'
{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_index': 'disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
}'

Končni izhod je prikazan:

3. primer: izključitev določenih polj

Iz določene zahteve lahko izključimo določena polja s parametroma source_include in source_exclude.

Primer je prikazan:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d'
{
'dokumenti': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_vir': napačno
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_vir': {
'include': [ 'listed_in', 'release_year', 'title' ],
'exclude': [ 'description', 'type', 'date_added' ]
}
}
]

}'

Dana zahteva uporablja vir vključi in izključi, da določi, katera polja želite pridobiti v danem dokumentu.

Končni izhod je prikazan:

Zaključek

V tej objavi smo razpravljali o osnovah dela z Elasticsearch multi-get API, ki vam omogoča pridobivanje več dokumentov iz različnih virov na podlagi njihovih ID-jev. Za več informacij lahko raziščete druge dokumente.

Veselo kodiranje!