Importación y gestión de paquetes en Amazon OpenSearch Service - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Importación y gestión de paquetes en Amazon OpenSearch Service

Amazon OpenSearch Service te permite subir archivos de diccionarios personalizados, como palabras vacías y sinónimos, y asociar complementos a tu dominio. Estos complementos pueden estar preempaquetados, personalizados o de terceros, lo que te da la flexibilidad de ampliar la funcionalidad de tu dominio. El término genérico para todos estos tipos de archivos es paquetes.

  • Los archivos de diccionario ayudan a refinar los resultados de la búsqueda, ya OpenSearch que indican que se deben omitir las palabras más frecuentes o tratar términos similares, como «crema congelada», «helado» o «helado», como equivalentes. También pueden mejorar la derivación, como ocurre con el complemento de análisis japonés (kuromoji).

  • Los complementos preempaquetados ofrecen funciones integradas, como el complemento Amazon Personalize para obtener resultados de búsqueda personalizados. Estos complementos utilizan el tipo de ZIP-PLUGIN paquete. Para obtener más información, consulte Plugins por versión de motor en Amazon OpenSearch Service.

  • Los complementos personalizados y de terceros le permiten agregar funciones personalizadas o integrarse con sistemas externos, lo que ofrece aún más flexibilidad para su dominio. Al igual que los complementos preempaquetados, subes complementos personalizados como ZIP-PLUGIN paquetes. En el caso de los complementos de terceros, también debes importar los archivos de licencia y configuración del complemento como paquetes separados y, a continuación, asociarlos todos al dominio.

    Para obtener más información, consulte los temas siguientes:

nota

Puedes asociar un máximo de 20 complementos a un único dominio. Este límite incluye todos los tipos de complementos: opcionales, de terceros y personalizados.

Permisos necesarios

Los usuarios sin acceso de administrador requieren ciertas acciones AWS Identity and Access Management (IAM) para poder administrar los paquetes:

  • es:CreatePackage— Crea un paquete

  • es:DeletePackage— Eliminar un paquete

  • es:AssociatePackage— Asociar un paquete a un dominio

  • es:DissociatePackage— Disociar un paquete de un dominio

También necesita permisos en la ruta del bucket de Amazon S3 u objeto donde reside el paquete personalizado.

Otorgue todos los permisos en IAM, no en la política de acceso al dominio. Para más información, consulte Identity and Access Management en Amazon OpenSearch Service.

Carga de paquetes en Amazon S3

En esta sección se explica cómo cargar paquetes de diccionarios personalizados, ya que los paquetes de complementos preempaquetados ya están instalados. Antes de poder asociar un diccionario personalizado a un dominio, debe cargarlo en un bucket de Amazon S3. Para ver las instrucciones, consulte Carga de objetos en la Guía del usuario de Amazon Simple Storage Service. No es necesario cargar los complementos admitidos.

Si su diccionario contiene información confidencial, especifique el cifrado del lado del servidor con claves administradas por S3 cuando lo cargue. OpenSearch El servicio no puede acceder a los archivos de S3 que protejas con una clave. AWS KMS

Después de cargar el archivo, tome nota de su ruta de S3. El formato de la ruta es s3://amzn-s3-demo-bucket/file-path/file-name.

Puede utilizar el siguiente archivo de sinónimos para fines de prueba. Guárdelo como synonyms.txt.

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

Algunos diccionarios, como los diccionarios Hunspell, utilizan varios archivos y requieren sus propios directorios en el sistema de archivos. En este momento, el OpenSearch servicio solo admite diccionarios de un solo archivo.

Importación y asociación de paquetes

La consola es la forma más sencilla de importar un diccionario personalizado a OpenSearch Service. Al importar un diccionario de Amazon S3, OpenSearch Service almacena su propia copia del paquete y la cifra automáticamente mediante AES-256 con OpenSearch claves administradas por el servicio.

Los complementos opcionales ya vienen preinstalados en el OpenSearch Servicio, por lo que no es necesario que los cargue usted mismo, pero sí que tiene que asociar un complemento a un dominio. Los complementos disponibles aparecen en la pantalla Paquetes de la consola.

  1. En la consola OpenSearch de Amazon Service, selecciona Paquetes.

  2. Elija Import package (Importar paquete).

  3. Asigne al paquete un nombre descriptivo.

  4. Proporcione la ruta de S3 al archivo y, a continuación, elija Importar.

  5. Vuelva a la pantalla Paquetes.

  6. Cuando el estado del paquete sea Disponible, elíjalo.

  7. Seleccione Asociar a un dominio.

  8. Selecciona un dominio y, a continuación, selecciona Siguiente. Revisa los paquetes y selecciona Asociar.

  9. En el panel de navegación, seleccione el dominio y, a continuación, vaya a la pestaña Paquetes.

  10. Si el paquete es un diccionario personalizado, anote el ID cuando el paquete esté disponible. analyzers/idUtilícela como ruta de archivo en las solicitudes para OpenSearch.

Usar paquetes con OpenSearch

En esta sección se explica cómo usar ambos tipos de paquetes: diccionarios personalizados y complementos preempaquetados.

Uso de diccionarios personalizados

Después de asociar un archivo a un dominio, puede usarlo en parámetros como synonyms_pathstopwords_path, y user_dictionary al crear tokenizadores y filtros de token. El parámetro exacto varía según el objeto. Varios objetos admiten synonyms_path y stopwords_path, pero user_dictionary es exclusivo del complemento kuromoji.

Para el complemento IK (chino) Analysis, puede cargar un archivo de diccionario personalizado en forma de paquete personalizado y asociarlo a un dominio, y el complemento lo recogerá automáticamente sin necesidad de parámetro user_dictionary. Si se trata de un archivo de sinónimos, utilice el parámetro synonyms_path.

El siguiente ejemplo agrega un archivo de sinónimos a un nuevo í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 solicitud crea un analizador personalizado para el índice que utiliza el generador de tokens estándar y un filtro de token de sinónimos.

  • Los generadores de tokens dividen las secuencias de caracteres en tokens (normalmente palabras) en función de algún conjunto de reglas. El ejemplo más simple es el generador de tokens de espacios en blanco, que divide los caracteres anteriores en un token cada vez que encuentra un carácter de espacio en blanco. Un ejemplo más complejo es el generador de tokens estándar, que utiliza un conjunto de reglas gramaticales para funcionar en muchos idiomas.

  • Los filtros de tokens agregan, modifican o eliminan tokens. Por ejemplo, un filtro de token de sinónimos agrega tokens cuando encuentra una palabra en la lista de sinónimos. El filtro de tokens de palabras vacías elimina los tokens cuando encuentra una palabra en la lista de palabras vacías.

Esta solicitud también agrega un campo de texto (description) al mapeo e indica que se debe OpenSearch usar el nuevo analizador como analizador de búsqueda. Puede ver que todavía utiliza el analizador estándar como analizador de índices.

Por último, tenga en cuenta la línea "updateable": true en el filtro de token. Este campo solo se aplica a los analizadores de búsqueda, no a los analizadores de índice, y es crítico si luego desea actualizar el analizador de búsqueda de forma automática.

Con fines de prueba, agregue algunos documentos al í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" }

A continuación, use un sinónimo para buscarlos:

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

En este caso, OpenSearch devuelve la siguiente respuesta:

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

Los archivos de diccionario utilizan espacio de montón de Java proporcional a su tamaño. Por ejemplo, un archivo de diccionario de 2 GiB podría consumir 2 GiB de espacio de montón en un nodo. Si utiliza archivos de gran tamaño, asegúrese de que los nodos tengan suficiente espacio en el montón para acomodarlos. Monitoree la métrica JVMMemoryPressure y escale el clúster según sea necesario.

Uso de complementos preempaquetados

OpenSearch El servicio le permite asociar OpenSearch complementos opcionales preinstalados para usarlos con su dominio. Un paquete de complementos preempaquetado es compatible con una OpenSearch versión específica y solo se puede asociar a los dominios con esa versión. La lista de paquetes disponibles para su dominio incluye todos los complementos compatibles con la versión de su dominio. Después de asociar un complemento a un dominio, comienza un proceso de instalación en el dominio. Luego, puedes hacer referencia al complemento y usarlo cuando realices solicitudes al OpenSearch Servicio.

La asociación y disociación de un complemento requiere una implementación. blue/green Para obtener más información, consulte Cambios que suelen provocar blue/green despliegues.

Los complementos opcionales incluyen analizadores de idioma y resultados de búsqueda personalizados. Por ejemplo, el complemento Amazon Personalize Search Ranking utiliza machine learning para personalizar los resultados de búsqueda para sus clientes. Para obtener más información sobre este complemento, consulte Personalización de los resultados de búsqueda desde. OpenSearch Para ver una lista de todos los complementos admitidos, consulte Plugins por versión de motor en Amazon OpenSearch Service.

Complemento Sudachi

En el caso del complemento Sudachi, al volver a asociar un archivo de diccionario, no se refleja inmediatamente en el dominio. El diccionario se actualiza cuando se ejecuta la siguiente blue/green implementación en el dominio como parte de un cambio de configuración u otra actualización. Como alternativa, puede crear un nuevo paquete con los datos actualizados, crear un nuevo índice con un nuevo paquete, volver a indexar el índice existente en el nuevo índice y, a continuación, eliminar el índice anterior. Si prefiere utilizar el enfoque de reindexación, utilice un alias de índice para que no se interrumpa el tráfico.

Además, el complemento Sudachi solo admite los diccionarios binarios de Sudachi, que se pueden cargar con la operación de la CreatePackageAPI. Para obtener información sobre el diccionario del sistema prediseñado y el proceso de compilación de diccionarios de usuario, consulte Documentación de Sudachi.

En el siguiente ejemplo, se muestra cómo utilizar los diccionarios de sistema y de usuario con el tokenizador de Sudachi. Debe cargar estos diccionarios como paquetes personalizados con el tipo TXT-DICTIONARY e incluir su paquete IDs en la configuración adicional.

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

Actualización de paquetes

En esta sección solo se explica cómo actualizar un paquete de diccionarios personalizado, ya que los paquetes de complementos preempaquetados ya están actualizados. Al cargar una nueva versión de un diccionario en Amazon S3, el paquete no se actualiza automáticamente en Amazon OpenSearch Service. OpenSearch El servicio almacena su propia copia del archivo, por lo que si subes una nueva versión a S3, tendrás que actualizarla manualmente.

Cada uno de los dominios asociados también almacena su propia copia del archivo. Para mantener el comportamiento de búsqueda predecible, los dominios siguen utilizando la versión actual del paquete hasta que los actualice explícitamente. Para actualizar un paquete personalizado, modifique el archivo Amazon S3 Control, actualice el paquete en OpenSearch Service y, a continuación, aplique la actualización.

  1. En la consola OpenSearch de servicio, selecciona Paquetes.

  2. Seleccione un paquete y luego Actualizar.

  3. Proporcione una nueva ruta de S3 al archivo y, a continuación, seleccione Actualizar paquete.

  4. Vuelva a la pantalla Paquetes.

  5. Cuando el estado del paquete cambie a Disponible, selecciónelo. A continuación, seleccione uno o más dominios asociados, Aplicar actualización y confirme. Espere a que el estado de asociación cambie a Activo.

  6. Los siguientes pasos varían en función de cómo haya configurado los índices:

Si bien la consola es el método más sencillo, también puedes usar la API, o la API de configuración para actualizar los paquetes de servicio. AWS CLI SDKs OpenSearch Para obtener más información, consulta la Referencia de AWS CLI comandos y la Referencia de la API de Amazon OpenSearch Service.

En lugar de actualizar manualmente un paquete en la consola, puede utilizar el SDKs para automatizar el proceso de actualización. El siguiente script de Python de ejemplo carga un nuevo archivo de paquete en Amazon S3, actualiza el paquete en OpenSearch Service y aplica el nuevo paquete al dominio especificado. Tras confirmar que la actualización se ha realizado correctamente, realiza un ejemplo de llamada para OpenSearch demostrar que se han aplicado los nuevos sinónimos.

Debe proporcionar valores para host, region, file_name, bucket_name, s3_key, package_id, domain_name y 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

Si recibes un mensaje de error que indica que no se ha encontrado el paquete al ejecutar el script AWS CLI, es probable que Boto3 esté utilizando la región especificada en ~/.aws/config, que no es la región en la que se encuentra tu bucket de S3. Puede ejecutar aws configure y especificar la región correcta o agregar explícitamente la región al cliente:

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

Actualización manual de los índices con un diccionario nuevo

Las actualizaciones manuales de los índices solo se aplican a los diccionarios personalizados, no a los complementos preempaquetados. Para utilizar un diccionario actualizado, debe actualizar de forma manual los índices, si cumple alguna de las siguientes condiciones:

  • El dominio ejecuta Elasticsearch 7.7 o anterior.

  • Utiliza paquetes personalizados como analizadores de índices.

  • Utiliza paquetes personalizados como analizadores de búsqueda, pero no incluye el campo actualizable.

Para actualizar los analizadores con los nuevos archivos de paquete, dispone de dos opciones:

  • Cierre y abra los índices que desee actualizar:

    POST my-index/_close POST my-index/_open
  • Vuelva a indexar los índices. Primero, cree un índice que utilice el archivo de sinónimos actualizado (o un archivo completamente nuevo). Tenga en cuenta que solo se admite 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" } } } }

    Luego vuelva a indexar el índice anterior con ese nuevo índice:

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

    Si actualiza con frecuencia los analizadores de índices, utilice alias de índice para mantener una ruta coherente al índice más reciente:

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

    Si no necesita el índice anterior, elimínelo:

    DELETE my-index

Disociación y eliminación de paquetes

Al disociar un paquete, ya sea un diccionario personalizado o un complemento preempaquetado, de un dominio, ya no podrás usar ese paquete al crear nuevos índices. Una vez disociado un paquete, los índices existentes que utilizaban el paquete ya no pueden usarlo. Debe eliminar el paquete de cualquier índice antes de poder disociarlo; de lo contrario, la disociación fallará.

La consola es la forma más sencilla de disociar un paquete de un dominio y eliminarlo del Servicio. OpenSearch Eliminar un paquete del OpenSearch Servicio no lo elimina de su ubicación original en Amazon S3.

  1. Inicia sesión en la consola OpenSearch de Amazon Service desde https://console.aws.amazon.com/aos/casa.

  2. En el panel de navegación, elija Dominios.

  3. Elige el dominio y, a continuación, dirígete a la pestaña Paquetes.

  4. Seleccione un paquete, Acciones y, a continuación, seleccione Disociar. Confirme su elección.

  5. Espere a que el paquete desaparezca de la lista. Puede que tenga que actualizar el navegador.

  6. Si desea utilizar el paquete con otros dominios, deténgase aquí. Para continuar con la eliminación del paquete (si es un diccionario personalizado), seleccione Paquetes en el panel de navegación.

  7. Seleccione el paquete y elija Eliminar.

También puedes usar la API de configuración o la AWS CLI API de configuración para disociar y eliminar paquetes. SDKs Para obtener más información, consulta la Referencia de AWS CLI comandos y la Referencia de la API de Amazon OpenSearch Service.