I když pro tuto věc existuje vestavěný mechanismus, Data Import Handler (DIH)
, jak je uvedeno v ostatních odpovědích, tento nástroj mi nepřišel příliš flexibilní. Chci tím říct, že pokud bych chtěl před indexováním provést nějakou masáž dat, mohl jsem se spolehnout pouze na funkce MySQL, když jsem mohl používat funkce PHP.
Nakonec jsem napsal svůj vlastní Data Import Handler jako PHP skript, kde provádí počáteční dotaz, poté prochází výsledky a masíruje (a ukládá do mezipaměti) data po vložení do indexu SOLR. Nebylo to příliš složité a vypadalo by to nějak (pouze demonstrativní):
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());
}
}
Toto je jen příklad toho, co můžete udělat. V mé situaci používám také ukládání do mezipaměti, abych zvýšil výkon, když provádím úplný import. Něco, co nemůžete udělat pomocí nativního DIH.
API, které používám pro přístup k SOLR prostřednictvím PHP, je solr-php-client , mohou tam být i další, takže googlete.