Mysql
 sql >> Base de données >  >> RDS >> Mysql

Importation automatique des données de mysql vers solr

Même s'il existe un mécanisme intégré pour cela, Data Import Handler (DIH) , comme mentionné dans les autres réponses, j'ai trouvé cet outil peu flexible. Ce que je veux dire par là, c'est que si je voulais faire du massage de données avant l'indexation, je ne pouvais dépendre que des fonctions MySQL, alors que j'aurais pu utiliser des fonctions PHP.

J'ai fini par écrire mon propre gestionnaire d'importation de données en tant que script PHP, où il effectue la requête initiale, puis parcourt les résultats et masse (et met en cache) les données lors de leur insertion dans l'index SOLR. Ce n'était pas trop compliqué et ressemblerait à quelque chose comme (uniquement démonstratif) :

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

Ceci n'est qu'un exemple de ce que vous pouvez faire. Dans ma situation, j'implique également la mise en cache pour augmenter les performances lorsque j'effectue une importation complète. Quelque chose que vous ne pouvez pas faire avec le DIH natif.

L'API que j'utilise pour accéder à SOLR via PHP est solr-php-client , il peut y en avoir d'autres, alors cherchez sur Google.