Importazione e gestione di pacchetti in Amazon Service OpenSearch - OpenSearch Servizio Amazon

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à.

Importazione e gestione di pacchetti in Amazon Service OpenSearch

Amazon OpenSearch Service consente di caricare file dizionario personalizzati, ad esempio stop word e sinonimi, e associare plugin al dominio. Questi plugin possono essere preconfezionati, personalizzati o di terze parti, il che ti offre la flessibilità necessaria per estendere le funzionalità del tuo dominio. Il termine generico per tutti questi tipi di file è pacchetti.

  • I file del dizionario aiutano a perfezionare i risultati della ricerca indicando di OpenSearch ignorare le parole più comuni ad alta frequenza o di trattare termini simili, come «crema congelata», «gelato» e «ice cream» come equivalenti. Possono anche migliorare lo stemming, come si è visto con il plugin di analisi del giapponese (kuromoji).

  • I plug-in preconfezionati offrono funzionalità integrate, come il plug-in Amazon Personalize per risultati di ricerca personalizzati. Questi plugin utilizzano il tipo di pacchetto. ZIP-PLUGIN Per ulteriori informazioni, consulta Plugin per versione del motore in Amazon Service OpenSearch .

  • I plug-in personalizzati e di terze parti consentono di aggiungere funzionalità personalizzate o di integrarsi con sistemi esterni, il che offre una flessibilità ancora maggiore per il dominio. Come i plugin preconfezionati, caricate i plugin personalizzati come pacchetti. ZIP-PLUGIN Per i plug-in di terze parti, è inoltre necessario importare la licenza del plug-in e i file di configurazione come pacchetti separati, quindi associarli tutti al dominio.

    Per ulteriori informazioni, consulta i seguenti argomenti:

Nota

Puoi associare un massimo di 20 plugin a un singolo dominio. Questo limite include tutti i tipi di plug-in: plug-in opzionali, di terze parti e personalizzati.

Autorizzazioni richieste

Gli utenti senza accesso da amministratore richiedono determinate operazioni AWS Identity and Access Management (IAM) per gestire i pacchetti:

  • es:CreatePackage— Creare un pacchetto

  • es:DeletePackage— Eliminare un pacchetto

  • es:AssociatePackage— Associazione di un pacchetto a un dominio

  • es:DissociatePackage— Dissociazione di un pacchetto da un dominio

Sono necessarie anche le autorizzazioni per il percorso del bucket Amazon S3 o l'oggetto in cui si trova il pacchetto personalizzato.

Concedere tutte le autorizzazioni all'interno di IAM, non nella policy di accesso al dominio. Per ulteriori informazioni, consultare Identity and Access Management in Amazon OpenSearch Service.

Caricamento di pacchetti in Amazon S3

Questa sezione spiega come caricare pacchetti di dizionari personalizzati, poiché i pacchetti di plug-in preconfezionati sono già installati. Prima di poter associare un dizionario personalizzato al dominio, è necessario caricarlo in un bucket Amazon S3. Per le istruzioni, consulta Caricamento di oggetti nella Guida per l'utente di Amazon Simple Storage Service. I plugin supportati non devono essere caricati.

Se il dizionario contiene informazioni riservate, specificare la crittografia lato server con chiavi gestite da S3 al momento del caricamento. OpenSearch Il servizio non è in grado di accedere ai file in S3 protetti tramite una AWS KMS chiave.

Dopo aver caricato il file, prendere nota del suo percorso S3. Il formato del percorso è s3://amzn-s3-demo-bucket/file-path/file-name.

È possibile utilizzare il seguente file di sinonimi per scopi di test. Salvalo come synonyms.txt.

danish, croissant, pastry ice cream, gelato, frozen custard sneaker, tennis shoe, running shoe basketball shoe, hightop

Alcuni dizionari, come i dizionari Hunspell, utilizzano più file e richiedono le proprie directory nel file system. Al momento, OpenSearch Service supporta solo dizionari a file singolo.

Importazione e associazione di pacchetti

La console è il modo più semplice per importare un dizionario personalizzato in OpenSearch Service. Quando si importa un dizionario da Amazon S3, OpenSearch Service memorizza la propria copia del pacchetto e ne esegue automaticamente la crittografia utilizzando AES-256 con chiavi gestite dal servizio. OpenSearch

I plug-in opzionali sono già preinstallati in OpenSearch Service, quindi non è necessario caricarli personalmente, ma è necessario associare un plug-in a un dominio. I plugin disponibili sono elencati nella schermata Pacchetti della console.

  1. Nella console di Amazon OpenSearch Service, scegli Pacchetti.

  2. Scegli Importa pacchetto.

  3. Assegnare al pacchetto un nome descrittivo.

  4. Fornire il percorso S3 del file e quindi scegliere Importa.

  5. Tornare alla schermata Pacchetti .

  6. Quando lo stato del pacchetto è disponibile, selezionarlo.

  7. Scegli Associa a un dominio.

  8. Seleziona un dominio, quindi scegli Avanti. Esamina i pacchetti e scegli Associa.

  9. Nel pannello di navigazione, scegliere il dominio e passare alla scheda Pacchetti.

  10. Se il pacchetto è un dizionario personalizzato, annota l'ID quando il pacchetto diventa Disponibile. Utilizza analyzers/id come percorso del file nelle richieste di OpenSearch.

Utilizzo di pacchetti con OpenSearch

Questa sezione spiega come utilizzare entrambi i tipi di pacchetti: dizionari personalizzati e plugin preconfezionati.

Utilizzo di dizionari personalizzati

Dopo aver associato un file a un dominio, è possibile utilizzarlo in parametri quali synonyms_pathstopwords_path, e user_dictionary quando si creano tokenizer e filtri token. Il parametro esatto varia in base all'oggetto. Diversi oggetti supportano synonyms_path e stopwords_path, ma user_dictionary è esclusivo per il plugin kuromoji.

Per il plug-in IK (Chinese) Analysis, è possibile caricare un file di dizionario personalizzato come pacchetto personalizzato e associarlo a un dominio e il plug-in lo raccoglie automaticamente senza richiedere un parametro user_dictionary. Se il file è un file di sinonimi, usa il parametro synonyms_path.

Nel seguente esempio viene aggiunto un file di sinonimi a un nuovo indice:

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" } } } }

Questa richiesta crea un analizzatore personalizzato per l'indice che utilizza il tokenizer standard e un filtro token sinonimo.

  • I tokenizer scompongono i flussi di caratteri in token (in genere parole) in base ad alcune regole. L'esempio più semplice è il tokenizer di whitespace, che scompone i caratteri precedenti in un token ogni volta che incontra un carattere di whitespace. Un esempio più complesso è il tokenizer standard, che utilizza un insieme di regole grammaticali per lavorare in molte lingue.

  • I filtri token aggiungono, modificano o eliminano token. Ad esempio, un filtro token sinonimo aggiunge token quando trova una parola nell'elenco dei sinonimi. Il filtro token di arresto rimuove i token quando trova una parola nell'elenco di parole stop.

Questa richiesta aggiunge anche un campo di testo (description) alla mappatura e indica di OpenSearch utilizzare il nuovo analizzatore come analizzatore di ricerca. Si può vedere che come analizzatore di indice è utilizzato ancora l'analizzatore standard.

Infine, prendere nota della riga "updateable": true nel filtro token. Questo campo si applica solo agli analizzatori di ricerca non agli analizzatori di indice, ed è critico se in seguito si desidera aggiornare l'analizzatore di ricerca automaticamente.

A scopo di test, aggiungere alcuni documenti all'indice:

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" }

Quindi cercarli usando un sinonimo:

GET my-index/_search { "query": { "match": { "description": "gelato" } } }

In questo caso, OpenSearch restituisce la risposta seguente:

{ "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" } }] } }
Suggerimento

I file di dizionario utilizzano lo spazio heap Java proporzionale alle loro dimensioni. Ad esempio, un file di dizionario a 2 GiB potrebbe consumare su un nodo 2 GiB di spazio heap. Se si utilizzano file di grandi dimensioni, assicurarsi che i nodi dispongano di spazio heap sufficiente per contenerli. Monitorare il parametro JVMMemoryPressure e dimensionare il cluster in base alle esigenze.

Utilizzo di plugin preconfezionati

OpenSearch Il servizio consente di associare OpenSearch plug-in opzionali preinstallati da utilizzare al dominio. Un pacchetto di plug-in preconfezionato è compatibile con una OpenSearch versione specifica e può essere associato solo a domini con quella versione. L'elenco dei pacchetti disponibili per il tuo dominio include tutti i plugin supportati compatibili con la versione del tuo dominio. Dopo aver associato un plug-in a un dominio, inizia un processo di installazione sul dominio. Quindi, puoi fare riferimento e utilizzare il plug-in quando effettui richieste al OpenSearch Servizio.

L'associazione e la dissociazione di un plug-in richiedono una distribuzione blu/verde. Per ulteriori informazioni, consulta Modifiche che di solito causano implementazioni blue/green .

I plugin opzionali includono analizzatori linguistici e risultati di ricerca personalizzati. Ad esempio, il plug-in Amazon Personalize Search Ranking utilizza l'apprendimento automatico per personalizzare i risultati di ricerca per i tuoi clienti. Per ulteriori informazioni su questo plugin, consulta Personalizzazione dei risultati di ricerca da. OpenSearch Per un elenco di tutti i plugin supportati, consulta. Plugin per versione del motore in Amazon Service OpenSearch

Plug-in Sudachi

Per il plugin Sudachi, quando riassoci un file di dizionario, questo non si riflette immediatamente sul dominio. Il dizionario si aggiorna quando viene eseguita la successiva distribuzione blu/verde sul dominio come parte di una modifica della configurazione o di un altro aggiornamento. In alternativa, puoi creare un nuovo pacchetto con i dati aggiornati, creare un nuovo indice utilizzando questo nuovo pacchetto, reindicizzare l'indice esistente nel nuovo indice e quindi eliminare il vecchio indice. Se preferisci utilizzare l'approccio di reindicizzazione, utilizza un alias di indice in modo da evitare interruzioni del traffico.

Inoltre, il plugin Sudachi supporta solo dizionari binari Sudachi, che puoi caricare con l'operazione API. CreatePackage Per informazioni sul dizionario di sistema predefinito e sul processo di compilazione dei dizionari utente, consulta la documentazione Sudachi.

L'esempio seguente illustra come utilizzare i dizionari di sistema e utente con il tokenizer Sudachi. È necessario caricare questi dizionari come pacchetti personalizzati con tipo TXT-DICTIONARY e fornire il relativo pacchetto nelle impostazioni aggiuntive. IDs

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" } } } } } }

Aggiornamento dei pacchetti

Questa sezione spiega solo come aggiornare un pacchetto di dizionario personalizzato, poiché i pacchetti di plugin preconfezionati sono già aggiornati automaticamente. Il caricamento di una nuova versione di un dizionario in Amazon S3 non aggiorna automaticamente il pacchetto su Amazon OpenSearch Service. OpenSearch Il servizio memorizza la propria copia del file, quindi se carichi una nuova versione su S3, sarà necessario aggiornarla manualmente.

Ciascuno dei domini associati archivia anche la propria copia del file. Per mantenere prevedibile il comportamento di ricerca, i domini continueranno a utilizzare la versione corrente del pacchetto fino a quando non vengono aggiornati esplicitamente. Per aggiornare un pacchetto personalizzato, modificare il file in Amazon S3 Control, aggiornare il pacchetto in OpenSearch Servizio, quindi applicare l'aggiornamento.

  1. Nella console OpenSearch di servizio, scegli Pacchetti.

  2. Scegli un pacchetto, quindi seleziona Aggiorna.

  3. Fornisci un nuovo percorso S3 del file e quindi scegli Aggiorna pacchetto di aggiornamento.

  4. Tornare alla schermata Pacchetti .

  5. Quando lo stato del pacchetto è Disponibile, selezionarlo. Scegliere uno o più domini associati, selezionare Applica aggiornamento e confermare. Attendere che lo stato dell'associazione cambi in Attivo.

  6. I passaggi successivi variano a seconda di come sono stati configurati gli indici:

    • Se il dominio esegue OpenSearch o utilizza Elasticsearch 7.8 o versioni successive e utilizza solo analizzatori di ricerca con il campo aggiornabile impostato su true, non è necessario eseguire altre operazioni. OpenSearch Il servizio aggiorna automaticamente gli indici utilizzando l'API _plugins/_refresh_search_analyzers.

    • Se il dominio esegue Elasticsearch 7.7 o versioni precedenti, utilizza gli analizzatori di indice o non utilizza il campo, consultare. updateable Aggiornamento manuale degli indici con un nuovo dizionario

Sebbene la console rappresenti il metodo più semplice, per aggiornare i AWS CLI pacchetti di OpenSearch servizio è possibile utilizzare anche l'API di configurazione. SDKs Per ulteriori informazioni, consulta AWS CLI Command Reference e Amazon OpenSearch Service API Reference.

Invece di aggiornare manualmente un pacchetto nella console, SDKs per automatizzare il processo di aggiornamento. Lo script Python di esempio seguente carica un nuovo file di pacchetto in Amazon S3, aggiorna il pacchetto in OpenSearch Service e applica il nuovo pacchetto al dominio specificato. Dopo aver confermato che l'aggiornamento ha avuto esito positivo, effettua una chiamata di esempio per OpenSearch dimostrare che i nuovi sinonimi sono stati applicati.

È necessario fornire valori per 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 quando si esegue lo script dalla viene visualizzato un errore «package not found» (pacchetto non trovato) AWS CLI, è probabile che Boto3 stia usando una qualsiasi regione specificata in ~/.aws/config, che non è la regione in cui si trova il bucket S3. Esegui aws configure e specifica la regione corretta oppure aggiungi esplicitamente la regione al client:

client = boto3.client('opensearch', region_name='us-east-1')

Aggiornamento manuale degli indici con un nuovo dizionario

Gli aggiornamenti manuali degli indici si applicano solo ai dizionari personalizzati, non ai plugin preconfezionati. Per utilizzare un dizionario aggiornato, occorre aggiornare manualmente gli indici se si verifica una delle seguenti condizioni:

  • Il dominio esegue Elasticsearch 7.7 o versioni precedenti.

  • I pacchetti personalizzati vengono utilizzati come analizzatori di indice.

  • I pacchetti personalizzati vengono utilizzati come analizzatori di ricerca, ma non includono il campo aggiornabile.

Per aggiornare gli analizzatori con i file del nuovo pacchetto, sono disponibili due opzioni:

  • Chiudi e apri gli indici da aggiornare:

    POST my-index/_close POST my-index/_open
  • Reindicizzare gli indici. Innanzitutto, creare un indice che utilizzi il file dei sinonimi aggiornato (o un file completamente nuovo). Nota che è supportato solo UTF-8.

    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" } } } }

    Quindi reindicizzare il vecchio indice nel nuovo indice:

    POST _reindex { "source": { "index": "my-index" }, "dest": { "index": "my-new-index" } }

    Se gli analizzatori di indice vengono aggiornati con una certa frequenza, utilizzare gli alias di indice per mantenere un percorso coerente per l'indice più recente:

    POST _aliases { "actions": [ { "remove": { "index": "my-index", "alias": "latest-index" } }, { "add": { "index": "my-new-index", "alias": "latest-index" } } ] }

    Se il vecchio indice non è necessario, eliminarlo.

    DELETE my-index

Dissociazione e rimozione dei pacchetti

Dissociare un pacchetto, che si tratti di un dizionario personalizzato o di un plugin preconfezionato, da un dominio significa che non è più possibile utilizzare quel pacchetto quando si creano nuovi indici. Dopo la dissociazione di un pacchetto, gli indici esistenti che lo utilizzavano non possono più utilizzarlo. È necessario rimuovere il pacchetto da qualsiasi indice prima di poterlo dissociare, altrimenti la dissociazione fallisce.

La console è il modo più semplice per dissociare un pacchetto da un dominio e rimuoverlo dal OpenSearch servizio. La rimozione di un pacchetto dal OpenSearch servizio non lo rimuove dalla posizione originale in Amazon S3.

  1. Accedi alla console di Amazon OpenSearch Service da https://console.aws.amazon.com/aos/casa.

  2. Nel riquadro di navigazione, scegli Domini.

  3. Scegli il dominio, quindi vai alla scheda Pacchetti.

  4. Scegliere un pacchetto, selezionare Operazioni, quindi scegliere Dissocia. Conferma la tua scelta.

  5. Attendi che il pacchetto scompaia dall'elenco. Potrebbe essere necessario aggiornare il browser.

  6. Se desideri utilizzare il pacchetto con altri domini, interrompi questa operazione a questo punto. Per continuare a rimuovere il pacchetto (se si tratta di un dizionario personalizzato), scegliere Packages (Pacchetti) nel riquadro di navigazione.

  7. Seleziona il pacchetto e scegli Elimina.

In alternativa, utilizza l'API AWS CLI SDKs, o configuration per dissociare e rimuovere i pacchetti. Per ulteriori informazioni, consulta AWS CLI Command Reference e Amazon OpenSearch Service API Reference.