Si administra una base de datos de SQL Server pero desea exponer todos los datos que ha recogido de forma más interesante y eficaz, está en el lugar adecuado.
Piénsalo así: Añadir Elasticsearch como índice secundario a tu almacén de datos primario de SQL Server es como añadir Google o Bing a tu aplicación. El uso de Elasticsearch para indexar datos de otro almacén de datos te permite añadir nuevas funciones a tu aplicación, como la búsqueda sugerente «más como esto», la puntuación de los resultados de búsqueda, las agregaciones y estadísticas rápidas, el filtrado de distancia geográfica y mucho más. Ah, y escucha esto: Es gratis. Así que, echemos un vistazo a algunas de las cosas útiles que Elasticsearch puede hacer y que SQL Server no puede.

Sincronización de datos entre el servidor SQL y Elasticsearch
De los muchos plugins disponibles para Elasticsearch, uno de los más útiles es el río. Un río de Elasticsearch se dirige a otro almacén de datos primarios y arroja cualquier adición o cambio realizado en su propio índice. Puede transmitir datos de MongoDB, CouchDB, una base de datos basada en SQL, o incluso directamente de Twitter! Cualquier adición o cambio realizado en el documento o en la fila de datos del almacén primario se actualizará automáticamente en el índice de Elasticsearch. Dado que la información del almacén de datos primario no se altera nunca durante la sincronización, esto le ofrece una gran flexibilidad con diferentes formas de configurar su índice de Elasticsearch. Siempre puede reconstruir fácilmente el índice con nuevos parámetros o tipos de datos simplemente cambiando sus mapeos y recreando su río! Por lo tanto, vamos a instalar el plugin de Elasticsearch para ríos y configurar un río para que funcione con SQL Server.
Por cierto, si eres nuevo en Elasticsearch o necesitas ayuda para instalarlo, estás en buena compañía. Puedes consultar mi curso de Introducción a Elasticsearch para desarrolladores .NET aquí para obtener más información sobre cómo empezar.
Nuestros datos del servidor SQL
He creado una base de datos básica en el servidor SQL con fines ilustrativos. Tiene una tabla llamada «Gente», con algunas filas de datos sobre gente ficticia.
Instalando el plugin _river en Elasticsearch
Lo primero que tenemos que hacer es instalar el plugin de Elasticsearch River que funciona con JDBC. Elasticsearch está escrito en Java, así que para acceder a SQL Server tendremos que pasar por un driver de JDBC. El plugin de Elasticsearch para el río JDBC se mantiene aquí, pero puede ser instalado a través del script normal del plugin de Elasticsearch.
- Desde la carpeta bin de su instalación de Elasticsearch, ejecute el plugin –instale jdbc –url.
- A continuación, ya que estamos tratando de comunicarnos con el servidor SQL, necesitaremos los controladores JDBC del proveedor apropiado. Puede descargar los últimos drivers de Microsoft que funcionan con SQL Server aquí.
- Descomprime los controladores JDBC y encuentra los archivos .jar en la carpeta sqljdbc_4.x/enu.
- Copia los archivos sqljdbc4.jar y sqljdbc41.jar a tu carpeta de plugins/jdbc en la ruta de instalación de Elasticsearch. La carpeta ya debería haber sido creada por la instalación del río. NO copie el archivo sqljdbc.jar. Esto es para una versión antigua de la JVM que probablemente no esté ejecutando, y causará que el plugin de river falle.
- Ahora, reinicie su nodo o grupo de Elasticsearch.
Configurando el _río
Ahora que hemos instalado el plugin de río y los drivers JDBC apropiados, estamos listos para instanciar un nuevo río para transmitir datos. Notarán que no hemos creado un mapa de índice o ninguna plantilla en Elasticsearch. Vamos a dejar que Elasticsearch elija los tipos de datos por nosotros cuando cree el índice. Esto permitirá la mayor flexibilidad, y para los propósitos de esta demostración, será lo más rápido para empezar. Alternativamente, podría preconfigurar sus mapeos de índice o usar una plantilla para dictar los tipos de datos de los mapeos de índice.
Para crear el nuevo río, tendremos que enviar una solicitud http a Elasticsearch. A modo ilustrativo, usaré el plugin «Postman» en Google Chrome, que es un excelente cliente http. La petición http que queremos enviar será un POST http con una carga útil json que contendrá todos los parámetros de nuestro río, incluyendo dónde encontrar el almacén de datos primario, cómo acceder a la base de datos y cómo seleccionar los datos de SQL Server.
URL: POST http://localhost:9200/_river/my_jdbc_river/_meta
JSON:
{
«tipo»: «jdbc»,
«horario» : «0 0-59 0-23 ? * *»,
«jdbc»: {
«driver»: «com.microsoft.sqlserver.jdbc.SQLServerDriver»,
«url»: «jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase»,
«usuario»: «mi_db_usuario», «contraseña»: «contraseña»,
«sql»: «select ID as _id, FirstName, LastName, DateOfBirth from People»,
«índice»: «personas»,
«tipo»: «persona»
}
}
Hay más opciones disponibles para el río JDBC, pero estas te ayudarán a empezar. Ahora, hablemos de lo que significa cada una de ellas:
- La url está apuntando al localhost, deberías cambiar esto por lo que sea que estés usando para tu url del nodo Elasticsearch. El puerto 9200 es el puerto de escucha estándar de Elasticsearch.
- El _river/segmento del url se refiere al plugin de río. my_jdbc_river es el nombre de tipo del río que queremos crear. Debe elegir un nombre que pertenezca a su operación. Finalmente, el segmento _meta le hace saber al plugin que este es un documento de configuración destinado a los parámetros del río.
- En la carga útil de JSON, tenemos un número de datos interesantes: tipo: El tipo de río que estamos instanciando en Elasticsearch; en este caso, un driver.schedule de JDBC: Dado que el servidor SQL no tiene ningún tipo de mecanismo de empuje y el plugin de río no puede leer el registro de transacciones, nuestro plugin encuestará al servidor SQL periódicamente para los cambios en los datos. El programa en este ejemplo hará que nuestro río realice una encuesta de Elasticsearch una vez por minuto, cada hora de cada día. Puede modificar esto a sus necesidades, según el léame en el JDBC _river Github repository.jdbc: Esta sección es bastante auto-explicativa. La línea «driver» le dice al plugin del río que use el driver jdbc de SQL Server que descargamos de Microsoft. La «url» es la cadena de conexión a su servidor SQL. «Usuario» y «contraseña» son el nombre de usuario que ha creado en su base de datos de SQL Server para que nuestro río lo utilice. El login debe tener privilegios de selección. El parámetro «sql» lleva alguna explicación. Este es el SQL que el río usará para seleccionar datos de su base de datos. Como puede imaginar, puede seleccionar tantas o tan pocas columnas como desee para añadirlas a su índice. He creado una declaración de selección con un alias que le dice a SQL Server que devuelva el campo clave primario «ID» como «_id». Esta es la convención de claves por defecto que Elasticsearch utiliza para todos los documentos. Es importante mantener esta nomenclatura cuando se seleccionan los datos para que Elasticsearch sepa que debe actualizar un documento y no crear uno nuevo cada vez que haga una encuesta.
Cuando presione «Enviar» en Cartero, la solicitud http se hará a Elasticsearch y se creará el _río. A medida que se instale, creará automáticamente el índice al que apunta y comenzará a sondear nuestra base de datos del servidor SQL.
A continuación, puede ver que nuestro índice de _rivers en el resumen y el índice de personas que nos generó. Navegando por estos datos, puedo ver que nuestro _river está llevando con éxito los documentos a Elasticsearch. Si modifico alguno de los datos en el SQL Server, los datos actualizados aparecerán en nuestro índice de Elasticsearch casi instantáneamente.
Opciones operacionales
Hay muchas consideraciones y opciones interesantes cuando se utiliza Elasticsearch como índice de búsqueda secundario. Dependiendo de la frecuencia con la que cambien los datos, es posible que no sea necesario realizar encuestas en el servidor SQL para detectar los cambios con mucha frecuencia. También es posible que desee jugar con diferentes analizadores y recrear su índice para encontrar los más adecuados para sus datos. Por último, si desea instituir un esquema estricto para sus datos, puede explorar utilizando plantillas, de modo que cada vez que cree un nuevo índice, los campos se creen utilizando tipos predecibles. Todas estas opciones pueden ayudar a que su índice de Elasticsearch funcione de manera más eficaz y facilitarán la integración en su entorno.