Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Compresión de solicitudes HTTP en Amazon OpenSearch Service
Puede comprimir solicitudes y respuestas HTTP en dominios de Amazon OpenSearch Service mediante la compresión gzip. La compresión gzip puede ayudar a reducir el tamaño de los documentos y a reducir la utilización y la latencia de la banda ancha, lo que permite mejorar las velocidades de transferencia.
La compresión gzip es compatible con todos los dominios que ejecutan OpenSearch, Elasticsearch 6.0 o posterior. Algunos clientes de OpenSearch cuentan con soporte integrado para la compresión gzip y muchos lenguajes de programación disponen de bibliotecas que simplifican el proceso.
Habilitar la compresión gzip
No debe confundirse con configuraciones similares de OpenSearch, http_compression.enabled
es específico de OpenSearch Service y habilita o deshabilita la compresión gzip en un dominio. Los dominios que ejecutan OpenSearch o Elasticsearch 7.x tienen la compresión gzip habilitada de forma predeterminada, mientras que los dominios que ejecutan Elasticsearch 6.x la tienen desactivada de forma predeterminada.
Para habilitar la compresión gzip, envíe la siguiente solicitud:
PUT _cluster/settings { "persistent" : { "http_compression.enabled": true } }
Solicitudes a _cluster/settings
deben estar descomprimidas, por lo que es posible que necesite utilizar un cliente independiente o una solicitud HTTP estándar para actualizar la configuración del clúster.
Para confirmar que ha habilitado correctamente la compresión gzip, envíe la siguiente solicitud:
GET _cluster/settings?include_defaults=true
Asegúrese de ver la siguiente configuración en la respuesta:
... "http_compression": { "enabled": "true" } ...
Encabezados obligatorios
Al incluir un cuerpo de la solicitud comprimido por gzip, mantenga el encabezado estándar Content-Type:
application/json
y agregue el encabezado Content-Encoding: gzip
. Para aceptar una respuesta comprimida con gzip, agregue también el encabezado Accept-Encoding: gzip
. Si un cliente de OpenSearch admite la compresión gzip, es probable que incluya estos encabezados automáticamente.
Código de muestra (Python 3)
En el siguiente ejemplo se utiliza opensearch-py
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))
Como alternativa, puede especificar los encabezados adecuados, comprimir el cuerpo de la solicitud usted mismo y utilizar una biblioteca HTTP estándar como Solicitudes
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)