Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Automatyczne importowanie danych z mysql do solr

Mimo że istnieje wbudowany mechanizm, Data Import Handler (DIH) , jak wspomniano w innych odpowiedziach, uważam, że to narzędzie nie jest zbyt elastyczne. Mam na myśli to, że gdybym chciał wykonać masowanie danych przed indeksowaniem, mógłbym polegać tylko na funkcjach MySQL, podczas gdy mogłem używać funkcji PHP.

Skończyło się na napisaniu własnego modułu obsługi importu danych jako skryptu PHP, w którym wykonuje początkowe zapytanie, a następnie przechodzi przez wyniki i masuje (i buforuje) dane po wstawieniu do indeksu SOLR. Nie było to zbyt skomplikowane i wyglądałoby mniej więcej tak (tylko demonstracyjnie):

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

To tylko przykład tego, co możesz zrobić. W mojej sytuacji włączam również buforowanie, aby zwiększyć wydajność, gdy robię pełny import. Coś, czego nie można zrobić przy użyciu natywnego DIH.

API, którego używam do uzyskania dostępu do SOLR przez PHP to solr-php-client , mogą być inni, więc poszukaj w Google.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL składnia 1064, ale wszystko wydaje się w porządku

  2. Wybór wielu tabel a JOIN (wydajność)

  3. Zmień tabelę lub zresetuj automatyczne przyrosty za pomocą CDbMigration

  4. WEEKDAY() Przykłady – MySQL

  5. MySQL, gdzie NIE W tablicy nazw?