Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Importação automática de dados do mysql para o solr


Mesmo que haja um mecanismo embutido para isso, Data Import Handler (DIH) , conforme mencionado nas demais respostas, achei essa ferramenta pouco flexível. O que quero dizer com isso é que, se eu quisesse fazer qualquer massagem de dados antes da indexação, eu só poderia depender das funções do MySQL, quando eu poderia ter usado as funções do PHP.

Acabei escrevendo meu próprio Data Import Handler como um script PHP, onde ele faz a consulta inicial, depois percorre os resultados e massageia (e armazena em cache) os dados ao inserir no índice SOLR. Não era muito complicado e seria algo como (somente demonstrativo):
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 é apenas um exemplo do que você pode fazer, na minha situação também envolvo o cache para aumentar o desempenho quando faço uma importação completa. Algo que você não pode fazer usando o DIH nativo.

A API que uso para acessar SOLR por PHP é solr-php-client , pode haver outros por aí, então pesquise no Google.