Selvom der er en indbygget mekanisme til netop denne ting, Data Import Handler (DIH)
, som nævnt i de andre svar, fandt jeg dette værktøj ikke særlig fleksibelt. Hvad jeg mener med dette er, at hvis jeg ønskede at foretage nogen datamassage før indeksering, kunne jeg kun stole på MySQL-funktioner, når jeg kunne have brugt PHP-funktioner.
Jeg endte med at skrive min egen Data Import Handler som et PHP-script, hvor den udfører den indledende forespørgsel og derefter træder gennem resultaterne og masserer (og cacher) data ved indsættelse i SOLR-indekset. Det var ikke for kompliceret og ville ligne (kun demonstrativt):
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());
}
}
Dette er blot et eksempel på, hvad du kan gøre. I min situation involverer jeg også caching for at øge ydeevnen, når jeg laver en fuld import. Noget du ikke kan gøre ved at bruge den oprindelige DIH.
Den API, jeg bruger til at få adgang til SOLR via PHP, er solr-php-client , der kan være andre derude, så google rundt.