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á.
Importação e gerenciamento de pacotes no Amazon Service OpenSearch
O Amazon OpenSearch Service permite carregar arquivos de dicionário personalizados, por exemplo, palavras irrelevantes e sinônimos, e associar plug-ins ao seu domínio. Esses plug-ins podem ser pré-empacotados, personalizados ou de terceiros, o que oferece flexibilidade para ampliar a funcionalidade do seu domínio. O termo genérico para todos esses tipos de arquivos é pacotes.
-
Os arquivos de dicionário ajudam a refinar os resultados da pesquisa instruindo OpenSearch a ignorar palavras comuns de alta frequência ou a tratar termos semelhantes, como “creme congelado”, “picolé” e “sorvete”, como equivalentes. Eles também podem melhorar a derivação
, como visto com o plugin de análise japonês (kuromoji). -
Os plug-ins pré-empacotados fornecem funcionalidades integradas, como o plug-in Amazon Personalize para resultados de pesquisa personalizados. Esses plug-ins usam o tipo de
ZIP-PLUGIN
pacote. Para obter mais informações, consulte Plugins por versão do mecanismo no Amazon OpenSearch Service. -
Plug-ins personalizados e de terceiros permitem que você adicione recursos personalizados ou se integre a sistemas externos, o que oferece ainda mais flexibilidade para seu domínio. Assim como os plug-ins pré-empacotados, você carrega plug-ins personalizados como
ZIP-PLUGIN
pacotes. Para plug-ins de terceiros, você também deve importar a licença do plug-in e os arquivos de configuração como pacotes separados e associá-los todos ao domínio.Para obter mais informações, consulte os tópicos a seguir.
nota
Você pode associar um máximo de 20 plug-ins a um único domínio. Esse limite inclui todos os tipos de plug-ins: opcionais, de terceiros e personalizados.
Tópicos
Permissões obrigatórias
Os usuários sem acesso de administrador exigem determinadas ações do AWS Identity and Access Management (IAM) para gerenciar pacotes:
-
es:CreatePackage
— Crie um pacote -
es:DeletePackage
— Excluir um pacote -
es:AssociatePackage
— Associar um pacote a um domínio -
es:DissociatePackage
— Dissociar um pacote de um domínio
Você também precisa de permissões no caminho do bucket do Amazon S3 ou no objeto em que o pacote personalizado reside.
Conceda todas as permissões no IAM, e não na política de acesso ao domínio. Para obter mais informações, consulte Identity and Access Management no Amazon OpenSearch Service.
Carregar pacotes para o Amazon S3
Esta seção aborda como carregar pacotes de dicionários personalizados, já que pacotes de plug-ins pré-empacotados já estão instalados. Antes de associar um dicionário customizado ao seu domínio, você deverá carregá-lo em um bucket do Amazon S3. Para obter mais informações, consulte Carregar objetos no Manual do usuário do Amazon Simple Storage Service. Plug-ins compatíveis não precisam ser carregados.
Se o dicionário contiver informações sigilosas, especifique a criptografia do lado do servidor com chaves gerenciadas pelo S3 ao carregá-lo. OpenSearch O serviço não pode acessar arquivos no S3 protegidos por uma AWS KMS chave do.
Depois de carregar o arquivo, anote o caminho do S3. O formato do caminho é s3://
.amzn-s3-demo-bucket
/file-path
/file-name
Você pode usar o seguinte arquivo de sinônimos para fazer testes. Salve-o como synonyms.txt
.
danish, croissant, pastry ice cream, gelato, frozen custard sneaker, tennis shoe, running shoe basketball shoe, hightop
Certos dicionários, como dicionários Hunspell, usam vários arquivos e exigem seus próprios diretórios no sistema de arquivos. No momento, o OpenSearch Serviço oferece suporte somente a dicionários de arquivo único.
Importação e associação de pacotes
O console é a maneira mais simples de importar um dicionário personalizado para o OpenSearch Serviço. Quando você importa um dicionário do Amazon S3, o OpenSearch Service armazena sua própria cópia do pacote e a criptografa automaticamente usando AES-256 com chaves gerenciadas pelo serviço. OpenSearch
Plug-ins opcionais já estão pré-instalados no OpenSearch Service, então você não precisa carregá-los, mas é necessário associar um plug-in a um domínio. Os plug-ins disponíveis estão listados na tela Pacotes, no console.
-
No console do Amazon OpenSearch Service, escolha Pacotes.
-
Escolha Import package (Importar pacote).
-
Dê um nome descritivo ao pacote.
-
Forneça o caminho do S3 até o arquivo e selecione Import (Importar).
-
Retorne à tela Pacotes.
-
Quando o status do pacote estiver Disponível, selecione-o.
-
Escolha Associar a um domínio.
-
Selecione um domínio e escolha Avançar. Revise os pacotes e escolha Associar.
-
No painel de navegação, escolha o domínio vá para a guia Pacotes.
-
Se o pacote for um dicionário personalizado, anote o ID quando o pacote se tornar Disponível. Use
analyzers/
como caminho do arquivo em solicitações para OpenSearch.id
Usando pacotes com OpenSearch
Esta seção aborda como usar os dois tipos de pacotes: dicionários personalizados e plug-ins pré-empacotados.
Uso de dicionários customizados
Depois de associar um arquivo a um domínio, você pode usá-lo em parâmetros como synonyms_path
stopwords_path
, e user_dictionary
ao criar tokenizadores e filtros de token. O parâmetro exato varia de acordo com o objeto. Vários objetos oferecem suporte a synonyms_path
e stopwords_path
, mas user_dictionary
é exclusivo para o plug-in kuromoji.
Para o plug-in de análise IK (chinês), você pode carregar um arquivo de dicionário personalizado como um pacote personalizado e associá-lo a um domínio, e o plug-in o seleciona automaticamente sem exigir um parâmetro user_dictionary
. Se seu arquivo for um arquivo de sinônimos, use o parâmetro synonyms_path
.
O seguinte exemplo adiciona um arquivo de sinônimo a um novo índice:
PUT
my-index
{ "settings": { "index": { "analysis": { "analyzer": { "my_analyzer
": { "type": "custom", "tokenizer": "standard", "filter": ["my_filter
"] } }, "filter": { "my_filter
": { "type": "synonym", "synonyms_path": "analyzers/F111111111
", "updateable": true } } } } }, "mappings": { "properties": { "description
": { "type": "text", "analyzer": "standard", "search_analyzer": "my_analyzer
" } } } }
Esta solicitação cria um analisador personalizado para o índice que utiliza o tokenizer padrão e um filtro de token de sinônimo.
-
Os tokenizers quebram fluxos de caracteres em tokens (normalmente palavras) de acordo com algum conjunto de regras. O exemplo mais simples é o tokenizer de espaço em branco, que divide os caracteres anteriores em um token cada vez que encontra um caractere de espaço em branco. Um exemplo mais complexo é o tokenizer padrão, que usa um conjunto de regras com base na gramática para trabalhar em vários idiomas.
-
Os filtros de token adicionam, modificam ou excluem tokens. Por exemplo, um filtro de token de sinônimo adiciona tokens quando encontra uma palavra na lista de sinônimos. O filtro de token de palavras irrelevantes remove tokens quando encontra uma palavra na lista de palavras irrelevantes.
Essa solicitação também adiciona um campo de texto (description
) ao mapeamento e orienta o uso do novo analisador como seu analisador de pesquisas. OpenSearch Você pode ver que ele ainda usa o analisador padrão como seu analisador de índices.
Finalmente, observe a linha "updateable": true
no filtro de token. Este campo aplica-se somente a analisadores de pesquisas, e não a analisadores de índices, e será crítico se você desejar atualizar o analisador de pesquisas automaticamente.
Para fazer testes, adicione alguns documentos ao índice:
POST _bulk { "index": { "_index": "my-index", "_id": "1" } } { "description": "ice cream" } { "index": { "_index": "my-index", "_id": "2" } } { "description": "croissant" } { "index": { "_index": "my-index", "_id": "3" } } { "description": "tennis shoe" } { "index": { "_index": "my-index", "_id": "4" } } { "description": "hightop" }
Depois, pesquise-os usando um sinônimo:
GET my-index/_search { "query": { "match": { "description": "gelato" } } }
Nesse caso, OpenSearch retorna a seguinte resposta:
{
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.99463606,
"hits": [{
"_index": "my-index",
"_type": "_doc",
"_id": "1",
"_score": 0.99463606,
"_source": {
"description": "ice cream"
}
}]
}
}
dica
Arquivos de dicionário usam espaço de heap Java proporcional ao seu tamanho. Por exemplo, um arquivo de dicionário de 2 GiB pode consumir 2 GiB de espaço de heap em um nó. Ao usar arquivos grandes, verifique se os nós têm espaço de heap suficiente para acomodá-los. Monitore a métrica JVMMemoryPressure
e dimensione o cluster conforme necessário.
Usando plug-ins pré-empacotados
OpenSearch O serviço permite associar OpenSearch plug-ins opcionais pré-instalados para usar com seu domínio. Um pacote de plug-in pré-empacotado é compatível com uma OpenSearch versão específica e só pode ser associado a domínios com essa versão. A lista de pacotes disponíveis para seu domínio inclui todos os plug-ins compatíveis com a versão do seu domínio. Depois de associar um plug-in a um domínio, um processo de instalação no domínio é iniciado. Em seguida, você pode consultar e usar o plug-in ao fazer solicitações ao OpenSearch Serviço.
Associar e dissociar um plug-in requer uma implantação azul/verde. Para obter mais informações, consulte Mudanças que geralmente causam blue/green implantações.
Plug-ins opcionais incluem analisadores de idioma e resultados de pesquisa personalizados. Por exemplo, o plug-in Amazon Personalize Search Ranking usa machine learning para personalizar os resultados da pesquisa para seus clientes. Para obter mais informações sobre esse plug-in, consulte Personalizar resultados de pesquisa de OpenSearch. Para obter uma lista de todos os plug-ins compatíveis, consulte Plugins por versão do mecanismo no Amazon OpenSearch Service.
Plug-in Sudachi
Quando você reassocia um arquivo de dicionário do plug-in Sudachi
Além disso, o plug-in Sudachi é compatível apenas com dicionários Sudachi binários, que você pode carregar com a operação da API. CreatePackage Para obter informações sobre o dicionário do sistema pré-construído e o processo para compilar dicionários do usuário, consulte a documentação do Sudachi
O exemplo a seguir demonstra como usar os dicionários do sistema e do usuário com o tokenizador do Sudachi. Você deve carregar esses dicionários como pacotes personalizados com tipo TXT-DICTIONARY
e fornecer seus pacotes IDs nas configurações adicionais.
PUT sudachi_sample { "settings": { "index": { "analysis": { "tokenizer": { "sudachi_tokenizer": { "type": "sudachi_tokenizer", "additional_settings": "{\"systemDict\": \"
<system-dictionary-package-id>
\",\"userDict\": [\"<user-dictionary-package-id>
\"]}" } }, "analyzer": { "sudachi_analyzer": { "filter": ["my_searchfilter"], "tokenizer": "sudachi_tokenizer", "type": "custom" } }, "filter":{ "my_searchfilter": { "type": "sudachi_split", "mode": "search" } } } } } }
Atualização de pacotes
Esta seção aborda apenas como atualizar um pacote de dicionário personalizado, porque pacotes de plug-ins pré-empacotados já são atualizados para você. O upload de uma nova versão de um dicionário do Amazon S3 não atualiza automaticamente o pacote no Amazon OpenSearch Service. OpenSearch O serviço armazena sua própria cópia do arquivo. Portanto, se você carregar uma nova versão no S3, precisará atualizá-la manualmente.
Cada um dos seus domínios associados armazena sua própria cópia do arquivo também. Para manter o comportamento de pesquisa previsível, os domínios continuarão a usar a versão atual do pacote até que você os atualize explicitamente. Para atualizar um pacote personalizado, modifique o arquivo no Amazon S3 Control, atualize o pacote no OpenSearch Service e, em seguida, aplique a atualização.
-
No console de OpenSearch serviço, escolha Pacotes.
-
Escolha um pacote e, em seguida, Atualizar.
-
Forneça um novo caminho do S3 para o arquivo e escolha Update package (Atualizar pacote).
-
Retorne à tela Pacotes.
-
Quando o status do pacote mudar para Disponível, selecione-o. Em seguida, escolha um ou mais domínios associados, Aplicar atualização e confirme. Aguarde até que o status da associação mude para Ativo.
-
As próximas etapas variam dependendo de como você configurou seus índices:
-
Se o seu domínio estiver executando OpenSearch o Elasticsearch 7.8 ou posterior e usando apenas analisadores de pesquisas com o campo atualizável definido como true (verdadeiro), você não precisa realizar nenhuma ação adicional. OpenSearch O serviço atualiza automaticamente seus índices usando a API _plugins/_refresh_search_analyzers
. -
Se o seu domínio estiver executando o Elasticsearch 7.7 ou anterior, usa analisadores de índices ou não usa o campo
updateable
, consulte Atualização manual de índices com um novo dicionário.
-
Embora o console seja o método mais simples, você também pode usar a API de configuração AWS CLI SDKs,,, ou para atualizar pacotes OpenSearch de serviços. Para obter mais informações, consulte a Referência de AWS CLI Comandos e a Referência da API do Amazon OpenSearch Service.
Em vez de atualizar manualmente um pacote no console, você pode usar o SDKs para automatizar o processo de atualização. O script Python de exemplo a seguir carrega um novo arquivo de pacote do Amazon S3, atualiza o pacote no OpenSearch Service e aplica o novo pacote ao domínio especificado. Depois de confirmar que a atualização foi bem-sucedida, ele faz uma chamada de exemplo para OpenSearch demonstrar que os novos sinônimos foram aplicados.
Você deve fornecer valores para host
, region
, file_name
, bucket_name
, s3_key
, package_id
, domain_name
e query
.
from requests_aws4auth import AWS4Auth import boto3 import requests import time import json import sys host = '' # The OpenSearch domain endpoint with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/ region = '' # For example, us-east-1 file_name = '' # The path to the file to upload bucket_name = '' # The name of the S3 bucket to upload to s3_key = '' # The name of the S3 key (file name) to upload to package_id = '' # The unique identifier of the OpenSearch package to update domain_name = '' # The domain to associate the package with query = '' # A test query to confirm the package has been successfully updated service = 'es' credentials = boto3.Session().get_credentials() client = boto3.client('opensearch') awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) def upload_to_s3(file_name, bucket_name, s3_key): """Uploads file to S3""" s3 = boto3.client('s3') try: s3.upload_file(file_name, bucket_name, s3_key) print('Upload successful') return True except FileNotFoundError: sys.exit('File not found. Make sure you specified the correct file path.') def update_package(package_id, bucket_name, s3_key): """Updates the package in OpenSearch Service""" print(package_id, bucket_name, s3_key) response = client.update_package( PackageID=package_id, PackageSource={ 'S3BucketName': bucket_name, 'S3Key': s3_key } ) print(response) def associate_package(package_id, domain_name): """Associates the package to the domain""" response = client.associate_package( PackageID=package_id, DomainName=domain_name) print(response) print('Associating...') def wait_for_update(domain_name, package_id): """Waits for the package to be updated""" response = client.list_packages_for_domain(DomainName=domain_name) package_details = response['DomainPackageDetailsList'] for package in package_details: if package['PackageID'] == package_id: status = package['DomainPackageStatus'] if status == 'ACTIVE': print('Association successful.') return elif status == 'ASSOCIATION_FAILED': sys.exit('Association failed. Please try again.') else: time.sleep(10) # Wait 10 seconds before rechecking the status wait_for_update(domain_name, package_id) def sample_search(query): """Makes a sample search call to OpenSearch""" path = '_search' params = {'q': query} url = host + path response = requests.get(url, params=params, auth=awsauth) print('Searching for ' + '"' + query + '"') print(response.text)
nota
Se você receber um erro de “pacote não encontrado” ao executar o script usando a AWS CLI, isso provavelmente significa que o Boto3 está usando qualquer região especificada em ~/.aws/config, que não é a região em que seu bucket do S3 está. Execute aws configure
e especifique a região correta ou adicione explicitamente a região ao cliente:
client = boto3.client('opensearch', region_name='us-east-1')
Atualização manual de índices com um novo dicionário
As atualizações manuais do índice se aplicam somente a dicionários personalizados, não a plug-ins pré-empacotados. Para usar um dicionário atualizado, será necessário atualizar manualmente seus índices se você atender a qualquer uma das seguintes condições:
-
Seu domínio executa o Elasticsearch 7.7 ou anterior.
-
Você usa pacotes personalizados como analisadores de índices.
-
Você usa pacotes personalizados como analisadores de pesquisas, mas não inclui o campo atualizável.
Para atualizar os analisadores com os novos arquivos de pacote, você tem duas opções:
-
Feche e abra todos os índices que deseja atualizar:
POST
my-index
/_close POSTmy-index
/_open -
Reindexe os índices. Primeiro, crie um índice que use o arquivo de sinônimos atualizado (ou um arquivo inteiramente novo). Observe que apenas o UTF-8 é compatível.
PUT
my-new-index
{ "settings": { "index": { "analysis": { "analyzer": { "synonym_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["synonym_filter"] } }, "filter": { "synonym_filter": { "type": "synonym", "synonyms_path": "analyzers/F222222222
" } } } } }, "mappings": { "properties": { "description
": { "type": "text", "analyzer": "synonym_analyzer" } } } }Depois reindexe
o índice antigo para o novo: POST _reindex { "source": { "index": "
my-index
" }, "dest": { "index": "my-new-index
" } }Se você atualiza analisadores de índices com frequência, use aliases de índices
para manter um caminho consistente para o índice mais recente: POST _aliases { "actions": [ { "remove": { "index": "
my-index
", "alias": "latest-index
" } }, { "add": { "index": "my-new-index
", "alias": "latest-index
" } } ] }Se não precisar do índice antigo, exclua-o:
DELETE
my-index
Dissociação e remoção de pacotes
Dissociar um pacote, seja um dicionário personalizado ou um plug-in pré-empacotado, de um domínio significa que você não poderá mais usar esse pacote ao criar novos índices. Depois que um pacote é dissociado, os índices existentes que estavam usando o pacote não podem mais usá-lo. Você deve remover o pacote de qualquer índice antes de poder dissociá-lo, caso contrário, a dissociação falhará.
O console é a maneira mais simples de dissociar um pacote de um domínio e removê-lo do OpenSearch Service. A remoção de um pacote do OpenSearch Serviço não o remove de sua localização original no Amazon S3.
-
Faça login no console do Amazon OpenSearch Service em https://console.aws.amazon.com/aos/casa
. -
No painel de navegação à esquerda, escolha Domínios.
-
Escolha o domínio e navegue até a guia Pacotes.
-
Escolha um pacote, Ações e Dissociar. Confirme sua escolha.
-
Aguarde até que o pacote desapareça da lista. Talvez seja necessário atualizar o navegador.
-
Se desejar usar o pacote com outros domínios, pare aqui. Para continuar com a remoção do pacote (se for um dicionário customizado), escolha Pacotes no painel de navegação.
-
Selecione o pacote e Excluir.
Como alternativa, use a API de configuração AWS CLI SDKs, ou para dissociar e remover pacotes. Para obter mais informações, consulte a Referência de AWS CLI Comandos e a Referência da API do Amazon OpenSearch Service.