Mysql
 sql >> Database >  >> RDS >> Mysql

Importazione automatica dei dati da mysql a solr

Anche se esiste un meccanismo integrato proprio per questa cosa, Data Import Handler (DIH) , come accennato nelle altre risposte, ho trovato questo strumento poco flessibile. Ciò che intendo dire con questo è che se volessi eseguire il massaggio dei dati prima dell'indicizzazione potrei dipendere solo dalle funzioni MySQL, quando avrei potuto usare le funzioni PHP.

Ho finito per scrivere il mio gestore di importazione dati come script PHP, dove esegue la query iniziale, quindi scorre i risultati e memorizza (e memorizza nella cache) i dati dopo l'inserimento nell'indice SOLR. Non era troppo complicato e sarebbe stato qualcosa del tipo (solo dimostrativo):

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());
    }
}

Questo è solo un esempio di cosa puoi fare, nella mia situazione coinvolgo anche la memorizzazione nella cache per aumentare le prestazioni quando eseguo un'importazione completa. Qualcosa che non puoi fare usando il DIH nativo.

L'API che utilizzo per accedere a SOLR tramite PHP è solr-php-client , potrebbero essercene altri là fuori, quindi cerca su Google.