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.