Compactação de solicitações HTTP no Amazon OpenSearch Service - OpenSearch Serviço Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Compactação de solicitações HTTP no Amazon OpenSearch Service

Você pode compactar solicitações e respostas HTTP nos domínios do Amazon OpenSearch Service usando a compactação gzip. A compactação gzip pode ajudar a reduzir o tamanho de seus documentos e reduzir a utilização e a latência da largura de banda, levando a velocidades de transferência aprimoradas.

A compactação gzip é compatível com todos os domínios que executam o OpenSearch ou o Elasticsearch 6.0 ou posterior. Alguns clientes OpenSearch oferecem suporte interno à compactação gzip, e muitas linguagens de programação têm bibliotecas que simplificam o processo.

Habilitação da compactação gzip

Não confunda com configurações semelhantes do OpenSearch, http_compression.enabled é específico do OpenSearch Service e habilita ou desabilita a compactação gzip em um domínio. Domínios que executam o OpenSearch ou o Elasticsearch 7.x têm a compactação gzip habilitada por padrão, enquanto os domínios que executam o Elasticsearch 6.x têm o recurso desabilitado por padrão.

Para habilitar a compactação gzip, envie a seguinte solicitação:

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

As solicitações para _cluster/settings devem ser descompactadas, então você talvez precise usar um cliente separado ou uma solicitação HTTP padrão para atualizar as configurações do cluster.

Para confirmar que você habilitou a compactação gzip com êxito, envie a seguinte solicitação:

GET _cluster/settings?include_defaults=true

Verifique se você vê a seguinte configuração na resposta:

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

Cabeçalhos obrigatórios

Ao incluir um corpo de solicitação compactado com gzip, mantenha o cabeçalho Content-Type: application/json padrão e adicione o cabeçalho Content-Encoding: gzip. Para aceitar uma resposta compactada por gzip, adicione o cabeçalho Accept-Encoding: gzip também. Quando um cliente OpenSearch oferece suporte à compactação gzip, ele provavelmente inclui esses cabeçalhos automaticamente.

Código de exemplo (Python 3)

O exemplo a seguir usa opensearch-py para executar a compactação e enviar a solicitação. Esse código assina a solicitação usando suas credenciais do IAM.

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

Alternativamente, você pode especificar os cabeçalhos apropriados, compactar o corpo da solicitação e usar uma biblioteca HTTP padrão como Requests. Este código assina a solicitação usando credenciais básicas HTTP, às quais seu domínio pode oferecer suporte se você usa o controle de acesso refinado.

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)