Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengimpor data secara otomatis dari mysql ke solr

Meskipun ada mekanisme bawaan untuk hal ini, Data Import Handler (DIH) , seperti yang disebutkan dalam tanggapan lain, saya menemukan alat ini tidak terlalu fleksibel. Yang saya maksud dengan ini adalah, jika saya ingin melakukan pemijatan data sebelum pengindeksan, saya hanya bisa bergantung pada fungsi MySQL, ketika saya bisa menggunakan fungsi PHP.

Saya akhirnya menulis Data Import Handler saya sendiri sebagai skrip PHP, di mana ia melakukan kueri awal, kemudian melangkah melalui hasil dan memijat (dan cache) data setelah dimasukkan ke dalam indeks SOLR. Itu tidak terlalu rumit, dan akan terlihat seperti (demonstratif saja):

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

Ini hanyalah contoh dari apa yang dapat Anda lakukan, Dalam situasi saya, saya juga melibatkan caching untuk meningkatkan kinerja ketika saya melakukan impor penuh. Sesuatu yang tidak dapat Anda lakukan menggunakan DIH asli.

API yang saya gunakan untuk mengakses SOLR melalui PHP adalah solr-php-client , mungkin ada orang lain di luar sana, jadi carilah di 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. PHP MySQL batas waktu kueri kecil, harus menetapkan batas hingga 10

  2. Permintaan Pilihan Rantai Mysql

  3. Tabel MySQL -> Bisakah Anda mengembalikan baris yang sama beberapa kali, dalam kueri yang sama?

  4. sisipan bersyarat mysql - jika tidak ada sisipkan

  5. Ambil (batas) daftar di dalam Groupby di Entity Framework