Meskipun ada mekanisme bawaan untuk hal ini, Data Import Handler (DIH)
, seperti yang disebutkan dalam tanggapan lain, saya menemukan alat ini tidak terlalu fleksibel. Yang saya maksud dengan ini adalah, jika saya ingin melakukan pemijatan data sebelum pengindeksan, saya hanya bisa bergantung pada fungsi MySQL, ketika saya bisa menggunakan fungsi PHP.
Saya akhirnya menulis Data Import Handler saya sendiri sebagai skrip PHP, di mana ia melakukan kueri awal, kemudian melangkah melalui hasil dan memijat (dan cache) data setelah dimasukkan ke dalam indeks SOLR. Itu tidak terlalu rumit, dan akan terlihat seperti (demonstratif saja):
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());
}
}
Ini hanyalah contoh dari apa yang dapat Anda lakukan, Dalam situasi saya, saya juga melibatkan caching untuk meningkatkan kinerja ketika saya melakukan impor penuh. Sesuatu yang tidak dapat Anda lakukan menggunakan DIH asli.
API yang saya gunakan untuk mengakses SOLR melalui PHP adalah solr-php-client , mungkin ada orang lain di luar sana, jadi carilah di Google.