Elasticsearch Çoklu Al

Elasticsearch Coklu Al



Bu makale, kimliklerine göre birden çok JSON belgesini getirmek için Elasticsearch çoklu alma API'sinin nasıl kullanılacağını tartışacaktır. Ayrıca Elasticsearch, yalnızca belge kimliklerini kullanarak belgeleri endekslerden almak için tek bir alma sorgusu kullanmanıza olanak tanır.

Hadi keşfedelim.







Sözdizimi İste

Elasticsearch çoklu alma API'sinin sözdizimi aşağıdadır:



GET /_mget
GET / /_mget

Multi-get API, belgeleri aynı dizinde olmasalar bile getirmenize izin veren birden çok dizini destekler.



İstek, aşağıdaki yol parametrelerini destekler:





  1. – Kimlikleri tarafından belirtilen belgelerin alınacağı dizinin adı.

Diğer sorgu parametrelerini de gösterildiği gibi belirleyebilirsiniz:

  1. Tercih – Tercih edilen düğümü veya parçayı tanımlar.
  2. Gerçek zamanlı – true olarak ayarlanırsa işlem gerçek zamanlı olarak gerçekleştirilir.
  3. Yenile – Belirtilen belgeleri getirmeden önce işlemi hedef parçaları yenilemeye zorlar.
  4. yönlendirme – İşlemleri belirli bir parçaya yönlendirmek için kullanılan bir değer.
  5. Store_fields – Belge yerine bir dizinde depolanan belge alanlarını alır.
  6. _kaynak – İsteğin _source alanını döndürüp döndürmeyeceğini tanımlayan bir Boole değeri.

Sorgu, aşağıdaki değerleri içeren gövdeyi gerektirir:



  1. Dokümanlar – Getirmek istediğiniz belgeleri belirtir. Ayrıca, bu bölüm aşağıdaki öznitelikleri destekler:
    • _İD – Hedef belgenin benzersiz kimliği.
    • _index – Hedef belgeyi içeren dizin.
    • yönlendirme – Belgenin birincil parçasının anahtarı.
    • _kaynak – Doğruysa, tüm kaynak alanları içerir; aksi takdirde, onları hariç tutar.
    • _stored_fields – Eklemek istediğiniz depolanmış_alanlar.
  2. kimlikler – Almak istediğiniz belgelerin kimlikleri.

Örnek 1: Aynı Dizinden Birden Çok Belge Al

Aşağıdaki örnek, Netflix dizininden belirli kimliklere sahip belgeleri almak için Elasticsearch çoklu alma API'sinin nasıl kullanılacağını gösterir:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d'
{
'belgeler': [
{
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_id': 'W3wnVoMBck2AEzXPytlJ'
}
]
}'

Verilen istek, belirtilen kimliklere sahip belgeleri Netflix dizininden getirmelidir. Ortaya çıkan çıktı gösterildiği gibidir:

{
'belgeler': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_versiyon 1,
'_seq_no': 0,
'_birincil_term': 1,
'bulundu': doğru,
'_kaynak': {
'süre': '90 dk',
'listed_in': 'Belgeseller',
'ülke': 'Amerika Birleşik Devletleri',
'date_added': '25 Eylül 2021',
'show_id': 's1',
'yönetmen': 'Kirsten Johnson',
'yayın_yılı': 2020,
'derecelendirme': 'PG-13',
'description': 'Babası hayatının sonuna yaklaşırken, film yapımcısı Kirsten Johnson ölümünü, her ikisinin de kaçınılmaz olanla yüzleşmelerine yardımcı olmak için yaratıcı ve komik yollarla sahneliyor.',
'tür': 'Film',
'başlık': 'Dick Johnson Öldü'
}
},
{
'_index': 'netflix',
'_id': 'W3wnVoMBck2AEzXPytlJ',
'_versiyon 1,
'_seq_no': 12,
'_birincil_term': 1,
'bulundu': doğru,
'_kaynak': {
'ülke': 'Almanya, Çek Cumhuriyeti',
'show_id': 's13',
'yönetmen': 'Christian Schwochow',
'yayın_yılı': 2021,
'derecelendirme': 'TV-MA',
'description': 'Ailesinin çoğu bir terör saldırısında öldürüldükten sonra, genç bir kadın bilmeden onları öldüren gruba katılmaya ikna edilir.',
'tür': 'Film',
'başlık': 'Ben Karl'ım',
'süre': '127 dk',
'listed_in': 'Dramalar, Uluslararası Filmler',
'oyuncu': '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 Eylül 2021'
}
}
]

}

Belge kimliklerini aşağıda gösterildiği gibi basit bir diziye koyarak da isteği basitleştirebiliriz:

curl -XGET 'http://localhost:9200/netflix/_mget' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d'
{
'ids': ['T3wnVoMBck2AEzXPytlJ', 'W3wnVoMBck2AEzXPytlJ']
}'

Önceki istek benzer bir eylem gerçekleştirmelidir.

Örnek 2: Belgeleri Birden Çok Dizinden Alın

Aşağıdaki örnekte, istek, gösterildiği gibi farklı dizinlerden birden çok belge getirir:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d'
{
'belgeler': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ'
},
{
'_index': 'disney',
'_id': '8j4wWoMB1yF5VqfaKCE4'
}
]
}'

Ortaya çıkan çıktı gösterildiği gibidir:

Örnek 3: Belirli Alanları Hariç Tut

source_include ve source_exclude parametrelerini kullanarak belirli alanları belirli bir istekten hariç tutabiliriz.

Bir örnek gösterildiği gibidir:

curl -XGET 'http://localhost:9200/_mget' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d'
{
'belgeler': [
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_source': yanlış
},
{
'_index': 'netflix',
'_id': 'T3wnVoMBck2AEzXPytlJ',
'_kaynak': {
'include': [ 'listed_in', 'release_year', 'title' ],
'hariç tut': [ 'açıklama', 'tür', 'tarih_eklendi' ]
}
}
]

}'

Verilen istek, belirli bir belgede hangi alanları almak istediğinizi belirtmek için dahil etme ve hariç tutma kaynağını kullanır.

Ortaya çıkan çıktı gösterildiği gibidir:

Çözüm

Bu gönderide, kimliklerine göre çeşitli kaynaklardan birden fazla belge getirmenize olanak tanıyan Elasticsearch multi-get API ile çalışmanın temellerini tartıştık. Daha fazla bilgi için diğer belgeleri incelemekten çekinmeyin.

Mutlu kodlama!