Komprimieren von HTTP-Anfragen in Amazon OpenSearch Service - OpenSearch Amazon-Dienst

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Komprimieren von HTTP-Anfragen in Amazon OpenSearch Service

Sie können HTTP-Anfragen und -Antworten in Amazon OpenSearch Service-Domains mithilfe der GZIP-Komprimierung komprimieren. Die gzip-Komprimierung kann Ihnen dabei helfen, die Größe Ihrer Dokumente zu reduzieren und die Bandbreitennutzung und Latenz zu senken, was zu verbesserten Übertragungsgeschwindigkeiten führt.

Die Gzip-Komprimierung wird für alle Domains unterstützt, auf denen Elasticsearch 6.0 OpenSearch oder höher ausgeführt wird. Einige OpenSearch Clients verfügen über eine integrierte Unterstützung für die Gzip-Komprimierung, und viele Programmiersprachen verfügen über Bibliotheken, die den Prozess vereinfachen.

Aktivieren der gzip-Komprimierung

Nicht zu verwechseln mit ähnlichen OpenSearch Einstellungen, http_compression.enabled ist OpenSearch dienstspezifisch und aktiviert oder deaktiviert die GZIP-Komprimierung auf einer Domain. Domains, die auf Elasticsearch OpenSearch 7 laufen. Bei x ist die GZIP-Komprimierung standardmäßig aktiviert, wohingegen bei Domains, auf denen Elasticsearch 6 ausgeführt wird. x hat sie standardmäßig deaktiviert.

Um die gzip-Komprimierung zu aktivieren, senden Sie die folgende Anfrage:

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

Anforderungen an _cluster/settings müssen unkomprimiert sein. Daher müssen Sie möglicherweise eine separate Client- oder Standard-HTTP-Anforderung verwenden, um Clustereinstellungen zu aktualisieren.

Senden Sie die folgende Anfrage, um zu bestätigen, dass Sie die GZIP-Komprimierung erfolgreich aktiviert haben:

GET _cluster/settings?include_defaults=true

Stellen Sie sicher, dass Sie die folgende Einstellung in der Antwort sehen:

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

Erforderliche Header

Wenn Sie einen gzip-komprimierten Anforderungstext einschließen, behalten Sie den Standard-Content-Type: application/json-Header und fügen Sie den Content-Encoding: gzip-Header hinzu. Um eine gzip-komprimierte Antwort zu akzeptieren, fügen Sie den Accept-Encoding: gzip-Header auch hinzu. Wenn ein OpenSearch Client die Gzip-Komprimierung unterstützt, schließt er diese Header wahrscheinlich automatisch ein.

Beispiel-Code (Python 3)

Im folgenden Beispiel wird opensearch-py verwendet, um die Komprimierung durchzuführen und die Anforderung zu senden. Dieser Code signiert die Anforderung mit Ihren IAM-Anmeldeinformationen.

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))

Alternativ können Sie die richtigen Header angeben, den Anforderungstext selbst komprimieren und eine Standard-HTTP-Bibliothek wie Anforderungen verwenden. Dieser Code signiert die Anforderung mit grundlegenden HTTP-Anmeldeinformationen, die Ihre Domäne möglicherweise unterstützt, wenn Sie eine differenzierte Zugriffssteuerung verwenden.

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)