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 /
Multi-get API podpira več indeksov, kar vam omogoča pridobivanje dokumentov, tudi če niso v istem indeksu.
Zahteva podpira naslednje parametre poti:
-
– Ime indeksa, iz katerega želite pridobiti dokumente, kot jih določajo njihovi ID-ji.
Določite lahko tudi druge parametre poizvedbe, kot je prikazano:
- Prednost – Določa prednostno vozlišče ali drobec.
- V realnem času – Če je nastavljeno na true, se operacija izvaja v realnem času.
- Osveži – Prisili operacijo, da osveži ciljne drobce, preden pridobi podane dokumente.
- Usmerjanje – Vrednost, ki se uporablja za usmerjanje operacij na določen delček.
- Store_fields – Pridobi polja dokumenta, shranjena v indeksu, namesto v dokumentu.
- _vir – Logična vrednost, ki določa, ali naj zahteva vrne polje _source ali ne.
Poizvedba zahteva telo, ki vključuje naslednje vrednosti:
- 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.
- 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!