Elasticsearch Multi-Get

Elasticsearch Multi Get



Šiame straipsnyje bus aptarta, kaip naudoti „Elasticsearch multi-get“ API norint gauti kelis JSON dokumentus pagal jų ID. Be to, Elasticsearch leidžia naudoti vieną gavimo užklausą, kad gautumėte dokumentus iš indeksų, naudojant tik dokumentų ID.

Patyrinėkime.







Užklausa sintaksė

Toliau pateikiama Elasticsearch kelių programų API sintaksė:



GET /_mget
GET / /_mget

Multi-get API palaiko kelis indeksus, kurie leidžia gauti dokumentus, net jei jie nėra tame pačiame indekse.



Užklausa palaiko šiuos kelio parametrus:





  1. – Rodyklės, iš kurios reikia gauti dokumentus, pavadinimas, kaip nurodyta jų ID.

Taip pat galite nurodyti kitus užklausos parametrus, kaip parodyta:

  1. Pirmenybė – Apibrėžia pageidaujamą mazgą arba skeveldrą.
  2. Realiu laiku – Jei nustatyta į „true“, operacija atliekama realiuoju laiku.
  3. Atnaujinti – Priverčia operaciją atnaujinti tikslines skeveldras prieš gaunant nurodytus dokumentus.
  4. Maršrutas – Reikšmė, naudojama veiksmams nukreipti į konkrečią skeveldrą.
  5. Parduotuvės_laukai – Nuskaito dokumento laukus, saugomus rodyklėje, o ne dokumente.
  6. _source – Būlio reikšmė, apibrėžianti, ar užklausa turi grąžinti lauką _source, ar ne.

Užklausai reikalingas turinys, kurį sudaro šios reikšmės:



  1. Dokumentai – Nurodo dokumentus, kuriuos norite gauti. Be to, šis skyrius palaiko šiuos atributus:
    • _id – Unikalus tikslinio dokumento ID.
    • _indeksas – Rodyklė, kurioje yra tikslinis dokumentas.
    • Maršrutas – Pagrindinio dokumento fragmento raktas.
    • _source – Jei tiesa, tai apima visus šaltinio laukus; kitu atveju jie neįtraukiami.
    • _saugomi_laukai – Saugomi_laukai, kuriuos norite įtraukti.
  2. ID – Dokumentų, kuriuos norite gauti, ID.

1 pavyzdys: gaukite kelis dokumentus iš tos pačios rodyklės

Toliau pateiktame pavyzdyje parodyta, kaip naudoti Elasticsearch daugialypės terpės API, norint gauti dokumentus su konkrečiais ID iš „Netflix“ indekso:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: ataskaitos' -H 'Turinio tipas: programa/json' -d'
{
'dokumentai': [
{
'_id': 'T3wnVoMBck2ASezXPytlJ'
},
{
'_id': 'W3wnVoMBck2ASezXPytlJ'
}
]
}'

Pateikta užklausa turėtų gauti dokumentus su nurodytais ID iš „Netflix“ indekso. Gauta išvestis yra tokia, kaip parodyta:

{
'dokumentai': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2ASezXPytlJ',
'_version': 1,
'_seq_no': 0,
'_primary_termin': 1,
'rasta': tiesa,
'_source': {
'trukmė': '90 min',
'listed_in': 'Dokumentiniai filmai',
'country': 'Jungtinės Valstijos',
'date_added': '2021 m. rugsėjo 25 d.',
'show_id': 's1',
'režisierius': 'Kirsten Johnson',
'release_year': 2020 m.,
'įvertinimas': 'PG-13',
'Aprašymas': 'Kai jos tėvas artėja prie savo gyvenimo pabaigos, filmų kūrėja Kirsten Johnson išradingais ir komiškais būdais surežisuoja savo mirtį, kad padėtų jiems abiem susidurti su neišvengiamumu'.
'tipas': 'Filmas',
'pavadinimas': 'Dikas Džonsonas miręs'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2ASezXPytlJ',
'_version': 1,
'_seq_no': 12,
'_primary_termin': 1,
'rasta': tiesa,
'_source': {
'šalis': 'Vokietija, Čekija',
'show_id': 's13',
'režisierius': 'Christian Schwochow',
'release_year': 2021,
'vertinimas': 'TV-MA',
'Aprašymas': 'Po teroristinio išsprogdinimo nužudoma didžioji jos šeimos dalis, jauna moteris nesąmoningai priviliojama prisijungti prie grupės, kuri juos nužudė.'
'tipas': 'Filmas',
'title': 'Aš esu Karlas',
'trukmė': '127 min',
'listed_in': 'Dramos, tarptautiniai filmai',
„Vaidina“: „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': '2021 m. rugsėjo 23 d.'
}
}
]

}

Taip pat galime supaprastinti užklausą įtraukdami dokumentų ID į paprastą masyvą, kaip parodyta toliau:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: ataskaitos' -H 'Turinio tipas: programa/json' -d'
{
'ids': ['T3wnVoMBck2ASezXPytlJ', 'W3wnVoMBck2AezXPytlJ']
}'

Ankstesnė užklausa turėtų atlikti panašų veiksmą.

2 pavyzdys: gaukite dokumentus iš kelių rodiklių

Šiame pavyzdyje užklausa gauna kelis dokumentus iš skirtingų indeksų, kaip parodyta:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: ataskaitų teikimas' -H 'Turinio tipas: programa/json' -d'
{
'dokumentai': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2ASezXPytlJ'
},
{
'_index': 'Disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
}'

Gauta išvestis yra tokia, kaip parodyta:

3 pavyzdys: Išskirkite konkrečius laukus

Mes galime išskirti konkrečius laukus iš nurodytos užklausos naudodami parametrus source_include ir source_exclude.

Pavyzdys yra kaip parodyta:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: ataskaitų teikimas' -H 'Turinio tipas: programa/json' -d'
{
'dokumentai': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2ASezXPytlJ',
'_source': klaidinga
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2ASezXPytlJ',
'_source': {
'include': [ 'listed_in', 'release_year', 'title' ],
'exclude': [ 'aprašymas', 'tipas', 'pridėjimo_data']
}
}
]

}'

Pateiktoje užklausoje naudojamas šaltinio įtraukimas ir neįtraukimas, kad nurodytų, kuriuos laukus norite gauti pateiktame dokumente.

Gauta išvestis yra tokia, kaip parodyta:

Išvada

Šiame įraše aptarėme darbo su Elasticsearch multi-get API pagrindus, kurie leidžia gauti kelis dokumentus iš įvairių šaltinių pagal jų ID. Norėdami gauti daugiau informacijos, peržiūrėkite kitus dokumentus.

Laimingas kodavimas!