Mengompresi permintaan HTTP di Layanan Amazon OpenSearch - OpenSearch Layanan Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengompresi permintaan HTTP di Layanan Amazon OpenSearch

Anda dapat mengompres permintaan dan tanggapan HTTP di domain OpenSearch Layanan Amazon menggunakan kompresi gzip. Kompresi Gzip dapat membantu Anda mengurangi ukuran dokumen dan menurunkan penggunaan bandwidth dan latensi, sehingga meningkatkan kecepatan transfer.

Kompresi Gzip didukung untuk semua domain yang berjalan OpenSearch atau Elasticsearch 6.0 atau yang lebih baru. Beberapa OpenSearch klien memiliki dukungan built-in untuk kompresi gzip, dan banyak bahasa pemrograman memiliki perpustakaan yang menyederhanakan proses.

Mengaktifkan kompresi gzip

Jangan bingung dengan OpenSearch pengaturan serupa, http_compression.enabled khusus untuk OpenSearch Layanan dan mengaktifkan atau menonaktifkan kompresi gzip pada domain. Domain berjalan OpenSearch atau Elasticsearch 7. x mengaktifkan kompresi gzip secara default, sedangkan domain yang menjalankan Elasticsearch 6. x menonaktifkannya secara default.

Untuk mengaktifkan kompresi gzip, kirim permintaan berikut:

PUT _cluster/settings { "persistent" : { "http_compression.enabled": true } }

Permintaan ke _cluster/settings harus tidak dikompresi, jadi Anda mungkin perlu menggunakan klien terpisah atau permintaan HTTP standar untuk memperbarui pengaturan klaster.

Untuk mengonfirmasi bahwa Anda berhasil mengaktifkan kompresi gzip, kirim permintaan berikut:

GET _cluster/settings?include_defaults=true

Pastikan Anda melihat pengaturan berikut dalam respons:

... "http_compression": { "enabled": "true" } ...

Header yang dibutuhkan

Ketika menyertakan isi permintaan terkompresi gzip, pertahankan standar header Content-Type: application/json, dan tambahkan header Content-Encoding: gzip. Untuk menerima respon terkompresi gzip, tambahkan header Accept-Encoding: gzip juga. Jika OpenSearch klien mendukung kompresi gzip, kemungkinan akan menyertakan header ini secara otomatis.

Contoh kode (Python 3)

Sampel berikut menggunakan opensearch-py untuk melakukan kompresi dan mengirim permintaan. Kode ini menandatangani permintaan menggunakan kredensial IAM Anda.

from opensearchpy import OpenSearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import boto3 host = '' # e.g. my-test-domain.us-east-1.es.amazonaws.com region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Create the client. search = OpenSearch( hosts = [{'host': host, 'port': 443}], http_auth = awsauth, use_ssl = True, verify_certs = True, http_compress = True, # enables gzip compression for request bodies connection_class = RequestsHttpConnection ) document = { "title": "Moneyball", "director": "Bennett Miller", "year": "2011" } # Send the request. print(search.index(index='movies', id='1', body=document, refresh=True)) # print(search.index(index='movies', doc_type='_doc', id='1', body=document, refresh=True))

Sebagai alternatif, Anda dapat menentukan tajuk yang tepat, mengompres sendiri isi permintaan, dan menggunakan pustaka HTTP standar seperti Permintaan. Kode ini menandatangani permintaan menggunakan kredensial dasar HTTP, yang mungkin didukung domain Anda jika Anda menggunakan kontrol akses detail.

import requests import gzip import json base_url = '' # The domain with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/ auth = ('master-user', 'master-user-password') # For testing only. Don't store credentials in code. headers = {'Accept-Encoding': 'gzip', 'Content-Type': 'application/json', 'Content-Encoding': 'gzip'} document = { "title": "Moneyball", "director": "Bennett Miller", "year": "2011" } # Compress the document. compressed_document = gzip.compress(json.dumps(document).encode()) # Send the request. path = 'movies/_doc?refresh=true' url = base_url + path response = requests.post(url, auth=auth, headers=headers, data=compressed_document) print(response.status_code) print(response.text)