Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Automatischer Datenimport von mysql nach solr

Auch wenn es dafür einen eingebauten Mechanismus gibt, Data Import Handler (DIH) , wie in den anderen Antworten erwähnt, fand ich dieses Tool nicht sehr flexibel. Was ich damit meine ist, wenn ich vor der Indizierung Daten massieren wollte, könnte ich mich nur auf MySQL-Funktionen verlassen, wenn ich PHP-Funktionen hätte verwenden können.

Am Ende habe ich meinen eigenen Datenimport-Handler als PHP-Skript geschrieben, wo es die anfängliche Abfrage durchführt, dann die Ergebnisse schrittweise durchgeht und Daten beim Einfügen in den SOLR-Index massiert (und zwischenspeichert). Es war nicht zu kompliziert und würde in etwa so aussehen (nur zur Demonstration):

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());
    }
}

Dies ist nur ein Beispiel dafür, was Sie tun können. In meiner Situation beziehe ich auch Caching ein, um die Leistung zu steigern, wenn ich einen vollständigen Import durchführe. Etwas, das Sie mit dem nativen DIH nicht tun können.

Die API, die ich für den Zugriff auf SOLR über PHP verwende, ist solr-php-client , vielleicht gibt es da draußen noch andere, also googeln Sie sich um.