sql >> Base de Datos >  >> RDS >> Mysql

Importación automática de datos de mysql a solr

Aunque existe un mecanismo integrado para esto, Data Import Handler (DIH) , como se mencionó en las otras respuestas, encontré esta herramienta no muy flexible. Lo que quiero decir con esto es que si quisiera hacer un masaje de datos antes de la indexación, solo podría depender de las funciones de MySQL, cuando podría haber usado las funciones de PHP.

Terminé escribiendo mi propio controlador de importación de datos como un script PHP, donde realiza la consulta inicial, luego recorre los resultados y masajea (y almacena en caché) los datos al insertarlos en el índice SOLR. No era demasiado complicado y se vería algo así (solo como demostración):

SELECT 
  book.id AS book_id,
  book.name AS book_name,
  GROUP_CONCAT(DISTINCT author.name) AS authors
FROM
  book
INNER JOIN
  link_book_author AS alink ON alink.book_id = book.id
INNER JOIN
  author ON author.id = alink.author_id
GROUP BY
  book.id;

$stmt = $dbo->prepare($sql);

$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {

    try {

        $document = new Apache_Solr_Document();

        $document->Id = $row->book_id;
        $document->BookName = $row->book_name;

        $document->Author = explode(',' $row->author);

        $this->getSearchEngineInstance()->addDocument($document);

    } catch (Exception $e) {

        error_log(sprintf('Unable to add document to index: (%s)', $e->getMessage());
    }
}

Este es solo un ejemplo de lo que puede hacer. En mi situación, también involucro el almacenamiento en caché para aumentar el rendimiento cuando realizo una importación completa. Algo que no puedes hacer usando el DIH nativo.

La API que uso para acceder a SOLR a través de PHP es solr-php-client , puede haber otros, así que busca en Google.