Paquetes personalizados para 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.

Paquetes personalizados para Amazon OpenSearch Service

Amazon OpenSearch Service te permite cargar archivos de diccionarios personalizados, como palabras vacías y sinónimos, y también proporciona varios complementos opcionales preempaquetados que puedes asociar a tu dominio. El término genérico para referirse a ambos tipos de archivos es paquetes.

Los archivos de diccionario mejoran los resultados de búsqueda OpenSearch al indicar que hay que ignorar determinadas palabras muy frecuentes o tratar términos como «crema congelada», «helado» y «helado» como equivalentes. También pueden mejorar la derivación, como sucede en el complemento Japanese (kuromoji) Analysis.

Los complementos opcionales pueden proporcionar funciones adicionales a su dominio. Por ejemplo, puede usar el complemento Amazon Personalize para obtener resultados de búsqueda personalizados. Los complementos opcionales utilizan el tipo de paquete ZIP-PLUGIN. Para obtener más información sobre los complementos opcionales, consulte Plugins por versión de motor en Amazon OpenSearch Service.

Requisitos de permisos de paquetes

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

  • es:CreatePackage- crear un paquete en una región de OpenSearch servicio

  • es:DeletePackage- eliminar un paquete de una región OpenSearch de servicio

  • 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 opcionales ya vienen preinstalados. 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 gestionadas 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://bucket-name/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. Seleccione Importar paquete.

  3. Asigne un nombre descriptivo al diccionario personalizado.

  4. Proporcione la ruta de S3 al archivo y, a continuación, seleccione Enviar.

  5. Vuelva a la pantalla Paquetes.

  6. Cuando el estado del paquete sea Disponible, elíjalo. Los complementos opcionales estarán Disponibles automáticamente.

  7. Seleccione Asociar a un dominio.

  8. Seleccione un dominio y, a continuación, seleccione 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ízala como ruta del archivo en las solicitudes para OpenSearch.

Como alternativa, puede utilizar los AWS CLI SDK o la API de configuración para importar y asociar paquetes. Para obtener más información, consulta la Referencia de AWS CLI comandos y la Referencia de la API de Amazon OpenSearch Service.

Uso de paquetes con OpenSearch

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

Uso de diccionarios personalizados

Después de asociar un archivo a un dominio, puede usarlo en parámetros como synonyms_path, stopwords_path y user_dictionary al crear generadores de tokens 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 OpenSearch que se use 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 opcionales

OpenSearch El servicio le permite asociar OpenSearch complementos opcionales preinstalados para usarlos con su dominio. Un paquete de complementos opcional 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.

Asociar y disociar un complemento requiere una implementación azul/verde. Para más información, consulte Cambios que suelen causar implementaciones azul/verde.

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 implementación azul/verde en el dominio como parte de un cambio de configuración u otra actualización. Como alternativa, puedes crear un paquete nuevo con los datos actualizados, crear un índice nuevo con este paquete nuevo, 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 CreatePackageoperación de API. 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 y proporcionar sus ID de paquete 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 personalizados, ya que los paquetes de complementos opcionales 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, elija Paquetes.

  2. Seleccione un paquete y luego Actualizar.

  3. Proporcione la 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 variarán en función de cómo haya configurado los índices:

Aunque la consola es el método más sencillo, también puedes usar los SDK o la AWS CLI API de configuración para actualizar los paquetes de servicios. 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 de forma manual un paquete en la consola, puede utilizar los SDK 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 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')

Actualizaciones manuales de índices para diccionarios

Las actualizaciones manuales de índices solo se aplican a los diccionarios personalizados, no a los complementos opcionales. 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

Si disocia un paquete de un dominio, ya sea un diccionario personalizado o un complemento opcional, ya no podrá usar ese paquete cuando cree nuevos índices. Una vez disociado un paquete, los índices existentes que lo utilizaban 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. Visite https://aws.amazon.com y, a continuación, seleccione Iniciar sesión en la consola.

  2. En Analytics, selecciona Amazon OpenSearch Service.

  3. En el panel de navegación, elija el dominio y, a continuación, elija 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 puede utilizar los SDK o la AWS CLI API de configuración para disociar y eliminar los paquetes. Para obtener más información, consulta la Referencia de AWS CLI comandos y la Referencia de la API de Amazon OpenSearch Service.