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 permite cargar archivos de diccionario personalizados, como palabras excluidas y sinónimos, y asociar complementos a un 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 referirse a todos estos tipos de archivos es paquetes.
-
Los archivos de diccionario ayudan a refinar los resultados de búsqueda, OpenSearch porque indican que se omita palabras que se utilizan con gran frecuencia o que trate términos similares, como «crema helada», «helado» y «sorbete», 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 independientes y, a continuación, asociarlos todos al dominio.Para obtener más información, consulte los temas siguientes:
nota
Puede asociar un máximo de 20 complementos de complemento personalizado. Este límite incluye todos los tipos de complementos: opcionales, de terceros y personalizados.
Temas
Permisos necesarios
Los usuarios sin acceso de administrador requieren ciertas acciones de AWS Identity and Access Management (IAM) para administrar paquetes:
-
es:CreatePackage
— Crea un paquete -
es:DeletePackage
— Eliminar un paquete -
es:AssociatePackage
— Asociar un paquete a un dominio -
es:DissociatePackage
— Disociación de 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 vienen 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 el diccionario contiene información confidencial, especifique el cifrado del servidor mediante claves administradas por S3 al cargarlo. OpenSearch El servicio no puede acceder a los archivos de S3 protegidos por una AWS KMS clave de.
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, OpenSearch Service 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 desde Amazon S3, OpenSearch Service almacena su propia copia del paquete y cifra automáticamente esa copia 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í debe asociar un complemento a un dominio. Los complementos disponibles aparecen en la pantalla Paquetes de la consola.
-
En la consola OpenSearch de Amazon Service, selecciona Paquetes.
-
Elija Import package (Importar paquete).
-
Asigne al paquete un nombre descriptivo.
-
Proporcione la ruta de S3 al archivo y, a continuación, elija Importar.
-
Vuelva a la pantalla Paquetes.
-
Cuando el estado del paquete sea Disponible, elíjalo.
-
Seleccione Asociar a un dominio.
-
Selecciona un dominio y, a continuación, selecciona Siguiente. Revisa los paquetes y selecciona Asociar.
-
En el panel de navegación, seleccione el dominio y, a continuación, vaya a la pestaña Paquetes.
-
Si el paquete es un diccionario personalizado, anote el ID cuando el paquete esté disponible.
analyzers/
Úselo como ruta de archivo en las solicitudes para OpenSearch.id
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_path
stopwords_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 OpenSearch que 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 preempaquetados
OpenSearch El servicio le permite asociar OpenSearch complementos opcionales y preinstalados para usarlos con su dominio. Un paquete de complementos preempaquetados 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, puede hacer referencia al complemento personalizado y usarlo cuando realice solicitudes al OpenSearch Servicio.
Asociar y disociar un complemento requiere una implementación azul/verde. Para 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
Además, el complemento Sudachi solo admite diccionarios binarios de Sudachi, que puede cargar con la operación de 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
y proporcionar 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 personalizados, ya que los paquetes de complementos empaquetados previamente ya están actualizados. Al cargar una nueva versión de un diccionario en Amazon S3, no se actualiza automáticamente el paquete en Amazon OpenSearch Service. OpenSearch El servicio almacena su propia copia del archivo, por lo que si carga una nueva versión en S3, debe actualizarla de forma manual.
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 en Amazon S3 Control, actualice el paquete en OpenSearch Service y, a continuación, aplique la actualización.
-
En la consola OpenSearch de servicio, selecciona Paquetes.
-
Seleccione un paquete y luego Actualizar.
-
Proporcione una nueva ruta de S3 al archivo y, a continuación, elija Update package (Actualizar paquete).
-
Vuelva a la pantalla Paquetes.
-
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.
-
Los siguientes pasos variarán en función de cómo haya configurado los índices:
-
Si el dominio ejecuta OpenSearch Elasticsearch 7.8 o posterior y solo utiliza analizadores de búsqueda con el campo actualizable establecido en verdadero, no es necesario realizar ninguna acción adicional. OpenSearch El servicio actualiza automáticamente los índices mediante la API _plugins/_refresh_search_analyzers
. -
Si el dominio ejecuta Elasticsearch 7.7 o una versión anterior, utiliza analizadores de índice o no utiliza el campo
updateable
, consulte Actualización manual de los índices con un diccionario nuevo.
-
Aunque la consola es el método más simple, también puede utilizar la AWS CLI SDKs, o la API de configuración para actualizar paquetes OpenSearch de servicio. 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 la SDKs para automatizar el proceso de actualización. El siguiente ejemplo de script de Python carga un nuevo archivo de paquete en Amazon S3, actualiza el paquete en OpenSearch Service y aplica el nuevo paquete al dominio especificado. Después de confirmar que la actualización se realizó correctamente, realiza una llamada de ejemplo para OpenSearch demostrar que los nuevos sinónimos se aplicaron.
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 recibe un error «package not found» («paquete no encontrado») al ejecutar el script mediante la AWS CLI, es probable que signifique que Boto3 utiliza la región especificada en ~/.aws/config, que no es la región en la que se encuentra el 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 í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 POSTmy-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 preempaquetado, ya no podrá usar ese paquete cuando cree 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 OpenSearch Servicio. La eliminación de un paquete del OpenSearch Servicio no lo elimina de la ubicación original en Amazon S3.
-
Inicia sesión en la consola OpenSearch de Amazon Service desde https://console.aws.amazon.com/aos/casa
. -
En el panel de navegación, elija Dominios.
-
Elige el dominio y, a continuación, ve a la pestaña Paquetes.
-
Seleccione un paquete, Acciones y, a continuación, seleccione Disociar. Confirme su elección.
-
Espere a que el paquete desaparezca de la lista. Puede que tenga que actualizar el navegador.
-
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.
-
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.