Въпреки че има вграден механизъм за точно това нещо, Data Import Handler (DIH)
, както беше споменато в другите отговори, намерих този инструмент за не много гъвкав. Това, което имам предвид с това е, че ако исках да направя някакво масиране на данни преди индексиране, можех да разчитам само на MySQL функции, когато можех да използвам PHP функции.
В крайна сметка написах моя собствен Handler за импортиране на данни като PHP скрипт, където той изпълнява първоначалната заявка, след което преминава през резултатите и масажира (и кешира) данните при вмъкване в SOLR индекса. Не беше твърде сложно и щеше да изглежда нещо като (само демонстративно):
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());
}
}
Това е само пример за това какво можете да направите. В моята ситуация аз също включвам кеширане, за да повиша производителността, когато правя пълно импортиране. Нещо, което не можете да направите, като използвате родния DIH.
API, който използвам за достъп до SOLR чрез PHP, е solr-php-client , може да има и други, така че потърсете в Google.