自动将数据从mysql导入到solr

时间:2012-02-17 05:51:03

标签: php mysql solr

我想将值从mysql导入到solr ..我通过调用php脚本自动导入

使用mysql触发器。但我读到它不是一个好方法..是否还有其他解决方案

自动导入数据?

有人能帮帮我...

3 个答案:

答案 0 :(得分: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,可能还有其他API,所以google。

答案 1 :(得分:1)

Solr DataImportHandler可以帮助您从mysql中导入数据并将其编入索引 它提供Full indexIncrementally索引数据的能力 但是,它不是自动的,您需要通过调度程序cron触发数据导入。 Scheduling有一些选项正在处理。

答案 2 :(得分:0)

您也可以使用Solr Data Import Handler