¿Qué son los sinónimos en Elasticsearch?
En Elasticsearch, los sinónimos se utilizan para añadir equivalencias semánticas a las consultas de búsqueda. Por ejemplo, si un usuario busca "teléfono", también se pueden obtener resultados que incluyan el término "móvil" o "celular".
Tipos de Sinónimos
Bidireccionales
Los sinónimos bidireccionales son aquellos en los que los términos definidos son considerados equivalentes entre sí en ambas direcciones:
telefono, móvil, celular
Si se busca "teléfono" aparecerán resultados que contengan "teléfono" o "móvil" o "celular".
Unidireccionales
A diferencia de los bidireccionales, en los sinónimos unidireccionales se establece una relación de equivalencia en una sola dirección:
iphone, macbook => apple
En este caso, al buscar "iphone" o "macbook" se encontrarán resultados que contengan "apple" pero una búsqueda de "apple" (manzana) no devolverá resultados con "iphone" o "macbook"
Creación de sinónimos en Liferay DXP
Liferay DXP dispone de la funcionalidad de conjunto de sinónimos donde puedes añadir los diferentes sinónimos aunque tiene las siguientes limitaciones:
- Solo son válidos los sinónimos bidireccionales
- Está limitado a 10.000 sinónimos
- No soporta todos los idomas disponibles como por ejemplo el euskera o el gallego
En el momento de escribir este post la versión más reciente de Liferay DXP es la 2025.Q1 y la versión de Liferay Community la 7.4 GA132 por lo que estas limitaciones pueden cambiar en futuras versiones.
Creación de sinónimos en Liferay Community
Si no usas la versión DXP o no quieres tener las limitaciones que indicaba antes y quieres sacar el máximo partido en el uso de sinónimos, podemos modificar un filter de Elasticsearch ya existente en la configuración de liferay llamado "liferay_filter_synonym_es" que es usado por el analizador "liferay_analyzer_es", que es el analizador por defecto de todos los campos en español dentro de liferay . Date cuenta además que cada idioma tiene su propio filtro para los sinónimos.
Para modificar el filter, debemos ir a Panel de control -> Configuración del sistema -> Búsquedas - Elasticsearch 7
Y a continuación debes localizar la propiedad "Configuraciones adicionales del índice"
Si quieres saber más sobre crear tus propios filter y analyzer de Elasticsearch en Liferay, recuerda que tenemos una formación específica sobre ello dentro del curso "Dominando las búsquedas en Liferay"
Añadir los sinónimos directamente al filter
Dentro de la propiedad que hemos localizado en el punto anterior, introducimos lo siguiente
{
"analysis": {
"filter": {
"liferay_filter_synonym_es": {
"lenient": true,
"synonyms": [
"teléfono, móvil, celular",
"iphone, macbook => apple"
],
"type": "synonym_graph"
}
}
}
}
Añadir los sinónimos a Elasticsearch
La opción anterior es perfectamente válida, aunque cuando tenemos que trabajar con muchos sinónimos puede ser bastante difícil de gestionar.
Por ello, la otra opción es añadir un fichero con todos los sinónimos a Elasticsearch (puedes añadir hasta 10.000 sinónimos en un fichero y puedes tener varios sinónimos de ficheros. Puedes consultar la información sobre sinónimos directamente en Elasticsearch para ver como procede en estos casos) y referenciarlo posteriormente desde la configuración anterior de Liferay
Añadir fichero de sinónimos a Elasticsearch
El fichero debes crearlo dentro del directorio configs de tu instalación de elasticsearch. Por ejemplo, si estás usuando la imagen docker oficial docker.elastic.co/elasticsearch/elasticsearch:7.17.15 deberás crearlo dentro de /usr/share/elasticsearch/config/synonyms/synonyms_es.txt . Date cuenta que hemos creado un directorio llamado "synonyms" también simplemente por organización
El contenido de este fichero son los diferentes sinónimos que quieres crear, cada uno de ellos en una línea diferente. Siguiendo el ejemplo anterior, quedaría:
teléfono, móvil, celular
iphone, macbook => apple
Modificar la configuración de liferay
Dentro de la propiedad "Configuraciones adicionales del índice" que hemos localizado antes
{
"analysis": {
"filter": {
"liferay_filter_synonym_es": {
"lenient": true,
"synonyms_path": "synonyms/synonyms_es.txt",
"type": "synonym_graph"
}
}
}
}
Reindexar la información
Finalmente, una vez configurados los sinónimos necesitamos reindexar la información en elasticsearch. Para ello vamos a Panel de control -> Búsquedas -> Acciones de indexación -> Todos los índices de búsqueda (reindexar)
Probando el resultado
Ten en cuenta que los sinónimos son siempre dependientes del contexto de búsqueda por lo que cada sistema de búsqueda deberá establecer sus propias reglas de equivalencia de sinónimos. Usarlos correctamente puede marcar una gran diferencia en la calidad de las búsquedas y mejorar significativamente la experiencia del usuario.