HOWTO · MongoDB
Cómo instalar y usar Elasticsearch con MongoDB en Windows y Ubuntu
Instale Elasticsearch en Windows 10 o Ubuntu 20.04, verifíquelo localmente y comprenda cómo combinarlo con MongoDB para la búsqueda.
En esta página
Elasticsearch puede ejecutarse junto a MongoDB para proporcionar búsqueda de texto completo sobre datos seleccionados de la aplicación. MongoDB sigue siendo la fuente de verdad; una aplicación u otro proceso de integración debe copiar los cambios a un índice de Elasticsearch. Esta guía trata sobre cómo iniciar Elasticsearch en Windows 10 o Ubuntu 20.04, comprobar su endpoint local y las decisiones que implica una integración con Node.js.
Qué es Elasticsearch
Elasticsearch es un motor distribuido de búsqueda y análisis construido sobre Apache Lucene. Indexa documentos JSON para que las aplicaciones puedan buscar texto y filtrar campos estructurados. MongoDB almacena los documentos de la aplicación y admite consultas de propósito general; Elasticsearch mantiene un índice de búsqueda separado optimizado para la recuperación. No es un sustituto de MongoDB, y los dos almacenes no se sincronizan automáticamente.
El índice son datos derivados. Planifique cómo poblarlo inicialmente, propagar las inserciones, actualizaciones y eliminaciones posteriores, y reconstruirlo si se retrasa o si cambia su mapeo.
Instalar Elasticsearch en Windows 10
- Elija una distribución de Elasticsearch que sea compatible con la versión de Windows y los requisitos de tiempo de ejecución de Java indicados para esa versión. El archivo oficial puede incluir un JDK integrado; consulte las notas de instalación de la versión antes de instalar Java por separado. No se base en los antiguos mínimos de Java 7 o Java 8 como requisitos generales.
- Descargue el archivo para Windows desde la página oficial de descargas de Elasticsearch de Elastic y extráigalo en un directorio en el que su cuenta pueda escribir. La estructura del archivo y los valores predeterminados de seguridad varían según la versión.
- Abra el Símbolo del sistema o PowerShell en el directorio
binde Elasticsearch extraído e inicieelasticsearch.bat. Mantenga esa ventana abierta mientras se ejecuta el proceso en primer plano. Para un servicio persistente, utilice la configuración de servicio documentada para la versión seleccionada en lugar de tratar la ventana en primer plano como la instalación del servicio. - Mantenga habilitadas las funciones de seguridad de la versión. Elasticsearch 8 y versiones posteriores habilitan la seguridad de forma predeterminada; utilice las credenciales generadas o configure un usuario adecuado y los ajustes de TLS. No establezca
xpack.security.enabled: falseen una instancia accesible por red. Deshabilitar la seguridad solo es adecuado para un experimento local aislado sin acceso de red no confiable. - Compruebe
http://localhost:9200en un navegador o solicítelo concurl. Un nodo seguro en buen estado puede pedir credenciales o devolver una respuesta de autenticación; eso sigue mostrando que el endpoint es alcanzable. Utilice las credenciales y los detalles de HTTPS impresos o configurados durante la instalación.
Si el endpoint no responde, compruebe la ventana de inicio en busca de errores de arranque o de configuración, confirme que el proceso sigue en ejecución y verifique que otro proceso no esté usando el puerto 9200.
Instalar Elasticsearch en Ubuntu 20.04
- Seleccione una versión cuyo soporte y requisitos de paquete incluyan Ubuntu 20.04. Abra la guía oficial de instalación con APT de Elastic y siga los pasos de repositorio y clave de firma para la versión que haya elegido. Estos pasos configuran APT para que confíe en la clave de firma de paquetes de Elastic y recupere paquetes del repositorio de Elastic. Las instrucciones antiguas basadas en
apt-keyestán obsoletas; utilice el método de keyring que se muestra en la guía. Los paquetes de Elasticsearch suelen incluir un JDK integrado adecuado, así que instale un paquete de Java separado solo si las instrucciones de la versión seleccionada lo requieren. - Después de configurar el repositorio para la versión seleccionada, actualice el índice de paquetes de APT con
sudo apt-get updatey luego instale Elasticsearch consudo apt-get install elasticsearch. Si necesita implementaciones repetibles, compruebe las versiones disponibles en ese repositorio conapt-cache madison elasticsearche instale la versión exacta del paquete usandosudo apt-get install elasticsearch=<package-version>. Utilice la cadena de versión que informe APT; la línea del repositorio y las versiones disponibles dependen de la versión seleccionada en la guía de Elastic. - Inicie y habilite el servicio con
sudo systemctl enable --now elasticsearch.service. Compruébelo consudo systemctl status elasticsearch.service; inspeccione el journal del servicio o/var/log/elasticsearch/si el inicio falla. - La configuración principal es normalmente
/etc/elasticsearch/elasticsearch.yml. Mantenga habilitadas la autenticación y la seguridad de transporte, y configure la exposición de red de forma deliberada. Una configuración de un solo nodo no es automáticamente segura para exponerla públicamente. - Compruebe
https://localhost:9200utilizando las credenciales y la configuración de certificado de su versión. Una advertencia de certificado puede significar que el cliente no confía en la CA local; verifique el certificado o configure el cliente para que confíe en la CA generada en lugar de deshabilitar la verificación.
Una respuesta local correcta confirma que Elasticsearch se está ejecutando. No confirma que los registros de MongoDB se estén indexando.
Por qué usar Elasticsearch con MongoDB
MongoDB es generalmente el almacén autoritativo para los registros de la aplicación, mientras que Elasticsearch atiende las búsquedas sobre un índice mantenido por separado. Esta combinación puede proporcionar búsqueda de texto completo sin hacer que el índice de búsqueda sea la única copia de los datos. Los resultados de búsqueda pueden ir por detrás de MongoDB, por lo que las aplicaciones que necesitan consistencia inmediata deben tener en cuenta ese retraso.
Una integración con Node.js necesita una fuente de cambios de MongoDB, un cliente de Elasticsearch compatible con la versión de servidor elegida y una estrategia de indexación explícita. Un flujo típico lee los registros existentes para el índice inicial, escribe cada registro en Elasticsearch usando un ID de documento estable derivado de su _id de MongoDB, y luego aplica las inserciones, actualizaciones y eliminaciones a medida que se producen. Haga que las escrituras sean reintentables e idempotentes, registre los fallos para su reproducción y proporcione una forma de conciliar o reconstruir el índice. Compruebe un documento de ejemplo en MongoDB y consulte el documento de Elasticsearch correspondiente para verificar ambos lados.
El siguiente ejemplo de Node.js muestra la asignación determinista de un registro de MongoDB a un ID de documento de Elasticsearch y un cuerpo JSON. Se ejecuta sin ninguno de los dos servicios; solo demuestra la forma de la carga útil, no una escritura en una base de datos ni una sincronización.
const mongoRecord = {
_id: "product-42",
name: "Trail shoes",
category: "footwear"
};
const elasticsearchDocument = {
id: String(mongoRecord._id),
document: {
name: mongoRecord.name,
category: mongoRecord.category
}
};
console.log(JSON.stringify(elasticsearchDocument, null, 2));
{
"id": "product-42",
"document": {
"name": "Trail shoes",
"category": "footwear"
}
}
Para usar esta forma en una aplicación, envíe id como el ID de documento de Elasticsearch y document como su fuente a través de un cliente de Elasticsearch mantenido. Conecte esa escritura al manejo de cambios de MongoDB de la aplicación y gestione los reintentos y las eliminaciones de forma explícita. El ejemplo no establece que un cliente, complemento o versión de Elasticsearch concretos sean compatibles.
El ejemplo original de mongoosastic depende de un complemento heredado de Mongoose y de un cliente de Elasticsearch compatible. Su compatibilidad con una versión actual de Elasticsearch no se establece aquí, así que no trate ese fragmento ni sus mensajes de éxito como una integración verificada. Antes de adoptarlo, confirme que el complemento es compatible con las versiones exactas de Mongoose y Elasticsearch de su proyecto. Para una integración nueva, utilice un cliente mantenido y siga su guía específica de versión sobre indexación y flujos de cambios; una simple devolución de llamada de guardado por sí sola no demuestra que la indexación se haya completado.