Conexion con PostgreSQL - CONABIO/dev-for-solr GitHub Wiki

Introducción

Importar datos de PostgreSQL a Solr es bastante sencillo y podemos usar el controlador de importación de datos para que lo haga por nosotros.

PostgreSQL es compatible con JDBC, por lo que configurar el controlador de importación de datos solo requiere lo siguiente:

  1. Defina un nuevo controlador de solicitudes en el archivo solrconfig.xml.
  2. Definir fuente de datos
  3. Definir esquema
  4. Coloque los controladores JDBC en Solr.

Configurar el controlador de importación de datos para PostgreSQL

Estos son los pasos para configurar el controlador de importación de datos para PostgreSQL:

Actualizar solrconfig.xml para crear el controlador de solicitudes de "importación de datos" y permita que Solr lea archivos JAR personalizados publicados de la carpeta

../solr-8.11.2/contrib/dataimporthandler/lib

$ cd /opt/solr/solr-8.11.2/server/solr/sipecam/conf donde sipecam es el nombre del core en este caso.

Agregar las siguientes etiquetas debajo de la etiqueta para que Solr recoja los JAR personalizados

 <!--
     <lib path="../a-jar-that-does-not-exist.jar" />
  -->

######################################################################
#
#  Definir el controlador de solicitudes de importación de datos, 
#  el nombre data-config.xml es determinado por nosotros
#
######################################################################

<lib dir=”${solr.install.dir:../../../..}/contrib/dataimporthandler/lib” regex=”.*\.jar” />
<lib dir=”${solr.install.dir:../../../..}/dist/” regex=”solr-dataimporthandler-.*\.jar” />

<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>

2. Crear el archivo data-config.xml

En la misma carpeta que solrconfig.xml, este archivocontien las cadenas de conexión a las multiples fuentes dedatos así como las consultas para obtener datos y los detalles sobre los campos entrantes.

<dataConfig>

  <dataSource type="JdbcDataSource" name="snmb" driver="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/snmb_development" user="alfresco" password="alfresco...." />
  <dataSource type="JdbcDataSource" name="zendro" driver="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/zendro_development" user="alfresco" password="alfresco...." />

  <document name="snmb_sipecam">
    <entity name="conglomerado_muestra" dataSource="snmb" query="SELECT * FROM conglomerado_muestra;">
      <field column="nombre" name="nombre" />
      <field column="fecha_visita" name="fecha_visita" />
      <field column="tipo" name="tipo" />
      <field column="estado" name="estado" />
      <field column="municipio" name="municipio" />
      <field column="institucion" name="institucion" />
      <field column="monitoreo_tipo" name="monitoreo_tipo" />
    </entity>
    <entity name="archivo_camara" dataSource="snmb" query="SELECT * FROM archivo_camara_filesystem;">
      <field column="id" name="id" />
      <field column="camara_id" name="camara_id" />
      <field column="archivo_nombre_original" name="archivo_nombre_original" />
      <field column="archivo" name="archivo" />
      <field column="presencia" name="presencia" />
      <field column="nombre_comun" name="nombre_comun" />
      <field column="nombre_cientifico" name="nombre_cientifico" />
      <field column="numero_individuoes" name="nombre_individuos" />
      <field column="archivo_nombre_filesystem" name="archivo_nombre_filesystem" />
      <field column="archivo_ruta_filesystem" name="archivo_ruta_filesystem" />
    </entity>
    <entity name="people_downloads" dataSource="zendro"  query="select distinct name, last_name, institution, email from people_downloads;">
      <field column="name" />
      <field column="last_name" />
      <field column="institution" />
      <field column="email" />
    </entity>
    <entity name="imagenes" dataSource="zendro"  query="select 'imagenes' as base, &quot;Id_Ejemplar&quot;, &quot;Archivo&quot;, &quot;Familia&quot;, &quot;Genero&quot;, &quot;Especie&quot; from imagenes;">
      <field column="base" />
      <field column="Id_Ejemplar" />
      <field column="Archivo" />
      <field column="Familia" />
      <field column="Genero" />
      <field column="Especie" />
    </entity>
    <entity name="audios" dataSource="zendro" query="select 'audios' as base, &quot;Id_Ejemplar&quot;, &quot;Id_Grabacion&quot;, &quot;Familia&quot;, &quot;Genero&quot;, &quot;Especie&quot; from audios;">
      <field column="base" />
      <field column="Id_Ejemplar" />
      <field column="Id_Grabacion" />
      <field column="Familia" />
      <field column="Genero" />
      <field column="Especie" />
    </entity>
    <entity name="join_images_audios" dataSource="zendro" query="select imagenes.&quot;Id_Ejemplar&quot;, imagenes.&quot;Archivo&quot;, imagenes.&quot;Familia&quot;, imagenes.&quot;Genero&quot;, imagenes.&quot;Especie&quot;, audios.&quot;Id_Grabacion&quot;, audios.&quot;Familia&quot;, audios.&quot;Genero&quot;, audios.&quot;Especie&quot; FROM imagenes INNER JOIN audios ON imagenes.&quot;Id_Ejemplar&quot;=audios.&quot;Id_Ejemplar&quot;;">
      <field column="Id_Ejemplar" />
      <field column="Archivo" />
      <field column="Familia" />
      <field column="Genero" />
      <field column="Especie" />
      <field column="Id_Grabacion" />
    </entity>
  </document>
</dataConfig>

3. Editar el archivo de esquema administrado

Si no existe, crear el archivo schema.xml. Los campos entrantes definidos en el Paso 2 deben ser reconocibles por Solr.

Cada campo entrante debe asignarse al tipo de datos reconocible de Solr, para que pueda analizar los datos.

Al editar el archivo de esquema administrado, agregar los campos definidos anteriormente:

 <field name="nombre" type="string" indexed="true" stored="true" />
    <field name="fecha_visita" type="string" indexed="true" stored="true" />
    <field name="tipo" type="string" indexed="true" stored="true" />
    <field name="estado" type="string" indexed="true" stored="true" />
    <field name="municipio" type="string" indexed="true" stored="true" />
    <field name="institucion" type="string" indexed="true" stored="true" />
    <field name="monitoreo_tipo" type="string" indexed="true" stored="true" />
    <field name="conglomerado_muestra" type="string" indexed="true" stored="true" />
    <field name="camara_id" type="string" indexed="true" stored="true" />
    <field name="archivo_nombre_original" type="string" indexed="true" stored="true" />
    <field name="archivo" type="string" indexed="true" stored="true" />
    <field name="presencia" type="string" indexed="true" stored="true" />
    <field name="nombre_comun" type="string" indexed="true" stored="true" />
    <field name="nombre_cientifico" type="string" indexed="true" stored="true" />
    <field name="numero_individuos" type="string" indexed="true" stored="true" />
    <field name="archivo_nombre_filesystem" type="string" indexed="true" stored="true" />
    <field name="archivo_ruta_filesystem" type="string" indexed="true" stored="true" />
    <!-- vsanchez: Indexando para la tabla de people_downloads en Zendro"/> -->
    <field name="name" type="string" indexed="true" stored="true" />
    <field name="email" type="string" indexed="true" stored="true" />
    <field name="institution" type="string" indexed="true" stored="true" />
    <field name="last_name" type="string" indexed="true" stored="true" />
   
    <!-- vsanchez: Indexando para la tabla de imagenes en Zendro" -->
    <field name="Id_Ejemplar" type="string" indexed="true" stored="true"/>
    <field name="Archivo" type="string" indexed="true" stored="true"/>
    <field name="Familia" type="string" indexed="true" stored="true"/>
    <field name="Genero" type="string" indexed="true" stored="true"/>
    <field name="Especie" type="string" indexed="true" stored="true"/>

   <!-- vsanchez: Indexando para la tabla de audios en zendro -->
    <field name="Id_Grabacion" type="string" indexed="true" stored="true"/>
    <field name="base" type="string" indexed="true" stored="true"/>

4. Descargar y copiar el archivo jar del controlador jdbc para postgres en la carpeta "contrib/dataimporthandler/lib"

https://jdbc.postgresql.org/download.html

5. El último paso es importar la data

Por ejemplo, usando la interfaz web, seleccionando el core/dataimport/dataimport:

http://44.234.42.238:8989/solr/#/omar_testing/dataimport/dataimport

Screen Shot 2022-07-13 at 17 40 32
⚠️ **GitHub.com Fallback** ⚠️