Pacchetti personalizzati per Amazon OpenSearch Service - 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à.

Pacchetti personalizzati per Amazon OpenSearch Service

Amazon OpenSearch Service ti consente di caricare file di dizionario personalizzati, come parole chiave e sinonimi, e fornisce anche diversi plugin opzionali preconfezionati che puoi associare al tuo dominio. Il termine generico per entrambi questi tipi di file è pacchetti.

I file di dizionario migliorano i risultati della ricerca indicando di OpenSearch ignorare determinate parole ad alta frequenza o di trattare termini come «crema pasticcera surgelata», «gelato» e «gelato» come equivalenti. Possono anche migliorare lo stemming, come nel plugin di analisi del giapponese (kuromoji).

I plugin opzionali possono fornire funzionalità aggiuntive al tuo dominio. Ad esempio, puoi utilizzare il plug-in Amazon Personalize per ottenere risultati di ricerca personalizzati. I plugin opzionali utilizzano il tipo di ZIP-PLUGIN pacchetto. Per ulteriori informazioni sui plugin opzionali, consulta. Plugin per versione del motore in Amazon Service OpenSearch

Requisiti di autorizzazioni per i pacchetti

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

  • es:CreatePackage- creare un pacchetto in una regione OpenSearch di servizio

  • es:DeletePackage- eliminare un pacchetto da un'area OpenSearch di servizio

  • 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 opzionali sono già preinstallati. Prima di poter associare un dizionario personalizzato al tuo dominio, devi 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 sensibili, specifica la crittografia lato server con chiavi gestite da S3 al momento del caricamento. OpenSearch Il servizio non può accedere ai file su S3 che proteggi utilizzando una chiave. AWS KMS

Dopo aver caricato il file, prendere nota del suo percorso S3. Il formato del percorso è s3://bucket-name/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 Service. OpenSearch Quando importi un dizionario da Amazon S3, OpenSearch Service archivia la propria copia del pacchetto e la crittografa automaticamente 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. Assegna al dizionario personalizzato un nome descrittivo.

  4. Fornisci il percorso S3 del file e quindi scegli Invia.

  5. Tornare alla schermata Pacchetti .

  6. Quando lo stato del pacchetto è disponibile, selezionarlo. I plugin opzionali saranno automaticamente disponibili.

  7. Scegli Associa a un dominio.

  8. Seleziona un dominio, quindi scegli Associate (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.

In alternativa, utilizza gli AWS CLI SDK o l'API di configurazione per importare e associare i pacchetti. Per ulteriori informazioni, consulta AWS CLI Command Reference e Amazon OpenSearch Service API Reference.

Utilizzo di pacchetti con OpenSearch

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

Usare dizionari personalizzati

Dopo aver associato un file a un dominio, è possibile utilizzarlo in parametri quali synonyms_path, stopwords_path e user_dictionary durante la creazione di 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 seguente risposta:

{ "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 opzionali

OpenSearch Il servizio consente di associare OpenSearch plug-in opzionali preinstallati da utilizzare al dominio. Un pacchetto di plug-in opzionale è 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 blu/verde.

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

Plugin 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 mostra 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 i relativi ID dei pacchetti nelle impostazioni aggiuntive.

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 opzionali sono già aggiornati automaticamente. Il caricamento di una nuova versione di un dizionario su Amazon S3 non aggiorna automaticamente il pacchetto su Amazon OpenSearch Service. OpenSearch Il servizio archivia la propria copia del file, quindi se carichi una nuova versione su S3, devi 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, modifica il file in Amazon S3 Control, aggiorna il pacchetto in OpenSearch Service, quindi applica l'aggiornamento.

  1. Nella console OpenSearch di servizio, scegli Pacchetti.

  2. Scegli un pacchetto, quindi seleziona Aggiorna.

  3. Fornire il percorso S3 del file e quindi scegliere Aggiorna pacchetto.

  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:

Sebbene la console sia il metodo più semplice, puoi anche utilizzare gli SDK o l'API AWS CLI di configurazione per aggiornare i pacchetti di servizi. OpenSearch Per ulteriori informazioni, consulta AWS CLI Command Reference e Amazon OpenSearch Service API Reference.

Invece di aggiornare manualmente un pacchetto nella console, per automatizzare il processo di aggiornamento è possibile utilizzare gli SDK. Il seguente script Python di esempio carica un nuovo file di pacchetto su Amazon S3, aggiorna il pacchetto in OpenSearch Service e applica il nuovo pacchetto al dominio specificato. Dopo aver verificato l'avvenuto aggiornamento, esegue 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 ricevi un errore «pacchetto non trovato» quando esegui lo script utilizzando il AWS CLI, probabilmente significa che Boto3 sta utilizzando la 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')

Aggiornamenti manuali degli indici per i dizionari

Gli aggiornamenti manuali degli indici si applicano solo ai dizionari personalizzati, non ai plugin opzionali. Per utilizzare un dizionario aggiornato, è necessario aggiornare manualmente gli indici se si soddisfa 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, create 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

La dissociazione di un pacchetto, che si tratti di un dizionario personalizzato o di un plug-in opzionale, 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 servizio. OpenSearch La rimozione di un pacchetto dal OpenSearch servizio non lo rimuove dalla sua posizione originale su Amazon S3.

  1. Andare all'indirizzo https://aws.amazon.com e quindi scegliere Sign In to the Console (Accedi alla console).

  2. In Analytics, scegli Amazon OpenSearch Service.

  3. Nel riquadro di navigazione scegliere il dominio e quindi la scheda Packages (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), scegli Pacchetti nel pannello di navigazione.

  7. Seleziona il pacchetto e scegli Elimina.

In alternativa, usa gli SDK o l' AWS CLI API di configurazione per dissociare e rimuovere i pacchetti. Per ulteriori informazioni, consulta AWS CLI Command Reference e Amazon OpenSearch Service API Reference.