2012-02-17 148 views
1

我想從mysql導入值到solr ..我通過調用php腳本自動導入從mysql自動導入數據到solr

使用mysql觸發器。但我讀了它不是一個好方法..是否有

自動將數據導入任何其他解決方案?

有人可以幫助我plzz ...

回答

6

即使有一個內置的機制,這事,Data Import Handler (DIH),如其他答覆中提到,我發現這個工具不是很靈活。我的意思是,如果我想在索引之前進行任何數據按摩,那麼我只能依靠MySQL函數,當我可以使用PHP函數時。

我結束了寫我自己的數據導入處理程序作爲一個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無法做的事情。

我通過PHP使用訪問SOLR的API是solr-php-client,有可能是其他人在那裏,因此谷歌左右。