sql >> データベース >  >> RDS >> Mysql

mysqlからsolrへのデータの自動インポート

    このためのメカニズムが組み込まれていますが、Data Import Handler (DIH) 、他の回答で述べたように、私はこのツールがあまり柔軟ではないことに気づきました。これが意味するのは、インデックスを作成する前にデータマッサージを実行したい場合、PHP関数を使用できた場合、MySQL関数にしか依存できなかったということです。

    最終的に、独自のデータインポートハンドラーをPHPスクリプトとして記述し、最初のクエリを実行してから、結果をステップ実行し、SOLRインデックスに挿入するときにデータをマッサージ(およびキャッシュ)します。それほど複雑ではなく、次のようになります(説明のみ):

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

    これはあなたができることのほんの一例です。私の状況では、完全なインポートを行うときにパフォーマンスを向上させるためにキャッシュも必要です。ネイティブDIHではできないこと。

    PHPを介してSOLRにアクセスするために使用するAPIは、solr-php-client> 、他にもあるかもしれないので、ググってください。



    1. 新しい自動インクリメントIDで更新列を挿入する前のMySQLトリガー

    2. MySQL/PHPで最も人気のある単語を探す

    3. CSV ファイルを Oracle 外部テーブルにインポートする

    4. WP-CLIを使用して投稿リビジョンを削除する方法