sql >> Database teknologi >  >> RDS >> Mysql

Automatisk import af data fra mysql til solr

Selvom der er en indbygget mekanisme til netop denne ting, Data Import Handler (DIH) , som nævnt i de andre svar, fandt jeg dette værktøj ikke særlig fleksibelt. Hvad jeg mener med dette er, at hvis jeg ønskede at foretage nogen datamassage før indeksering, kunne jeg kun stole på MySQL-funktioner, når jeg kunne have brugt PHP-funktioner.

Jeg endte med at skrive min egen Data Import Handler som et PHP-script, hvor den udfører den indledende forespørgsel og derefter træder gennem resultaterne og masserer (og cacher) data ved indsættelse i SOLR-indekset. Det var ikke for kompliceret og ville ligne (kun demonstrativt):

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

Dette er blot et eksempel på, hvad du kan gøre. I min situation involverer jeg også caching for at øge ydeevnen, når jeg laver en fuld import. Noget du ikke kan gøre ved at bruge den oprindelige DIH.

Den API, jeg bruger til at få adgang til SOLR via PHP, er solr-php-client , der kan være andre derude, så google rundt.



  1. Hvordan kalder man SELECT over DBLINK over DBLINK?

  2. PostgreSQL Regex-ordgrænser?

  3. Hvorfor kan en tekstkolonne ikke have en standardværdi i MySQL?

  4. Sådan sammenkædes variabler i SQL-strenge