sql >> Databáze >  >> RDS >> Mysql

Automatický import dat z mysql do solr

I když pro tuto věc existuje vestavěný mechanismus, Data Import Handler (DIH) , jak je uvedeno v ostatních odpovědích, tento nástroj mi nepřišel příliš flexibilní. Chci tím říct, že pokud bych chtěl před indexováním provést nějakou masáž dat, mohl jsem se spolehnout pouze na funkce MySQL, když jsem mohl používat funkce PHP.

Nakonec jsem napsal svůj vlastní Data Import Handler jako PHP skript, kde provádí počáteční dotaz, poté prochází výsledky a masíruje (a ukládá do mezipaměti) data po vložení do indexu SOLR. Nebylo to příliš složité a vypadalo by to nějak (pouze demonstrativní):

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

Toto je jen příklad toho, co můžete udělat. V mé situaci používám také ukládání do mezipaměti, abych zvýšil výkon, když provádím úplný import. Něco, co nemůžete udělat pomocí nativního DIH.

API, které používám pro přístup k SOLR prostřednictvím PHP, je solr-php-client , mohou tam být i další, takže googlete.



  1. randomizace velkého souboru dat

  2. Předejte název schématu a název tabulky dynamicky v FROM ve výběrovém dotazu v Postgres

  3. Jak vložit seznam pythonů do tabulky Postgres

  4. MySQL – ruské znaky se zobrazují nesprávně