Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Compressione delle richieste HTTP in Amazon OpenSearch Service
Puoi comprimere le richieste e le risposte HTTP nei domini Amazon OpenSearch Service utilizzando la compressione gzip. La compressione gzip consente di ridurre le dimensioni dei documenti e di ridurre l'utilizzo della larghezza di banda e la latenza, migliorando così la velocità di trasferimento.
La compressione Gzip è supportata per tutti i domini che eseguono Elasticsearch 6.0 OpenSearch o versioni successive. Alcuni OpenSearch client dispongono del supporto integrato per la compressione gzip e molti linguaggi di programmazione dispongono di librerie che semplificano il processo.
Abilitazione della compressione gzip
Da non confondere con OpenSearch impostazioni simili, http_compression.enabled
è specifico di OpenSearch Service e abilita o disabilita la compressione gzip su un dominio. Domini in esecuzione OpenSearch o Elasticsearch 7. x hanno la compressione gzip abilitata per impostazione predefinita, mentre i domini che eseguono Elasticsearch 6. x l'hanno disabilitata per impostazione predefinita.
Per abilitare la compressione gzip, inviare la seguente richiesta:
PUT _cluster/settings { "persistent" : { "http_compression.enabled": true } }
Le richieste a _cluster/settings
devono essere decompresse, quindi potrebbe essere necessario utilizzare un client separato o una richiesta HTTP standard per aggiornare le impostazioni del cluster.
Per confermare di aver abilitato correttamente la compressione gzip, invia la seguente richiesta:
GET _cluster/settings?include_defaults=true
Assicurati di vedere la seguente impostazione nella risposta:
... "http_compression": { "enabled": "true" } ...
Intestazioni richieste
Quando si include un corpo di richiesta compresso con gzip, mantenere l'intestazione Content-Type:
application/json
standard e aggiungere l'intestazione Content-Encoding: gzip
. Per accettare una risposta gzip compressa, aggiungere anche l'intestazione Accept-Encoding: gzip
. Se un OpenSearch client supporta la compressione gzip, probabilmente include queste intestazioni automaticamente.
Codice di esempio (Python 3)
Nell'esempio seguente viene utilizzato 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))
In alternativa, è possibile specificare le intestazioni corrette, comprimere il corpo della richiesta da soli e utilizzare una libreria HTTP standard come Requests
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)