Även om det finns en inbyggd mekanism för just detta, Data Import Handler (DIH)
, som nämnts i de andra svaren, tyckte jag att det här verktyget inte var särskilt flexibelt. Vad jag menar med detta är att om jag ville göra någon datamassage före indexering kunde jag bara lita på MySQL-funktioner, när jag kunde ha använt PHP-funktioner.
Det slutade med att jag skrev min egen dataimporthanterare som ett PHP-skript, där den gör den första frågan och sedan går igenom resultaten och masserar (och cachar) data när den infogas i SOLR-indexet. Det var inte alltför komplicerat och skulle se ut ungefär som (endast 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());
}
}
Det här är bara ett exempel på vad du kan göra. I min situation involverar jag också cachning för att öka prestandan när jag gör en fullständig import. Något du inte kan göra med den inhemska DIH.
API:et jag använder för att komma åt SOLR via PHP är solr-php-client , det kan finnas andra där ute, så googla runt.