भले ही इस चीज़ के लिए एक अंतर्निहित तंत्र है, Data Import Handler (DIH)
, जैसा कि अन्य प्रतिक्रियाओं में उल्लेख किया गया है, मैंने पाया कि यह उपकरण बहुत लचीला नहीं है। इससे मेरा मतलब यह है कि, अगर मैं अनुक्रमण से पहले कोई डेटा मालिश करना चाहता था, तो मैं केवल MySQL फ़ंक्शंस पर निर्भर हो सकता था, जब मैं PHP फ़ंक्शंस का उपयोग कर सकता था।
मैंने अपना खुद का डेटा आयात हैंडलर एक PHP स्क्रिप्ट के रूप में लिखना समाप्त कर दिया, जहां यह प्रारंभिक क्वेरी करता है, फिर एसओएलआर इंडेक्स में डालने पर परिणामों और मालिश (और कैश) डेटा के माध्यम से कदम उठाता है। यह बहुत जटिल नहीं था, और कुछ इस तरह दिखेगा (केवल प्रदर्शनकारी):
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 का उपयोग करके नहीं कर सकते।
PHP के माध्यम से SOLR तक पहुँचने के लिए मैं जिस API का उपयोग करता हूँ वह है solr-php-client , वहाँ अन्य लोग भी हो सकते हैं, इसलिए Google पर नज़र रखें।