Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tự động nhập dữ liệu từ mysql sang solr

Mặc dù có một cơ chế được xây dựng sẵn cho điều này, Data Import Handler (DIH) , như đã đề cập trong các câu trả lời khác, tôi thấy công cụ này không linh hoạt cho lắm. Ý tôi là, nếu tôi muốn thực hiện bất kỳ thao tác xoa bóp dữ liệu nào trước khi lập chỉ mục, tôi chỉ có thể phụ thuộc vào các hàm MySQL, khi tôi có thể sử dụng các hàm PHP.

Tôi đã kết thúc việc viết Trình xử lý nhập dữ liệu của riêng mình dưới dạng tập lệnh PHP, nơi nó thực hiện truy vấn ban đầu, sau đó chuyển qua các kết quả và dữ liệu massages (và bộ nhớ đệm) khi chèn vào chỉ mục SOLR. Nó không quá phức tạp và sẽ trông giống như (chỉ mang tính chất minh họa):

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

Đây chỉ là một ví dụ về những gì bạn có thể làm, Trong tình huống của tôi, tôi cũng liên quan đến bộ nhớ đệm để tăng hiệu suất khi tôi nhập toàn bộ. Điều gì đó bạn không thể làm bằng DIH gốc.

API tôi sử dụng để truy cập SOLR thông qua PHP là solr-php-client , có thể có những người khác ngoài đó, vì vậy hãy google xung quanh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao null <> null =null trong mysql

  2. Đối phó với các tập hợp lồng nhau trong mysql?

  3. Làm cách nào để lấy dữ liệu trong bảng MySQL vào Java JTable?

  4. Vấn đề có nhiều cơ sở dữ liệu?

  5. Cách tốt nhất để lưu trữ kinh thánh trong SQL là gì?