sql >> Database >  >> RDS >> Mysql

Automatisch importeren van gegevens van mysql naar solr

Ook al is hier een ingebouwd mechanisme voor, Data Import Handler (DIH) , zoals vermeld in de andere reacties, vond ik deze tool niet erg flexibel. Wat ik hiermee bedoel, is dat als ik gegevens wilde masseren voordat ik indexeerde, ik alleen op MySQL-functies kon vertrouwen, terwijl ik PHP-functies had kunnen gebruiken.

Uiteindelijk heb ik mijn eigen Data Import Handler als een PHP-script geschreven, waarbij het de eerste query uitvoert, vervolgens door de resultaten stapt en gegevens masseert (en cachet) bij invoeging in de SOLR-index. Het was niet al te ingewikkeld en zou er ongeveer zo uitzien (alleen ter demonstratie):

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

Dit is slechts een voorbeeld van wat u kunt doen. In mijn situatie gebruik ik ook caching om de prestaties te verbeteren wanneer ik een volledige import doe. Iets wat je niet kunt doen met de native DIH.

De API die ik gebruik om SOLR via PHP te benaderen is solr-php-client , er kunnen anderen zijn, dus google maar eens rond.



  1. Hoe voer ik een zoekopdracht uit op een kolomwaarde die een tekenreeks bevat met door komma's gescheiden waarden?

  2. 1000+ API calls met 1 cronjob?

  3. De afzonderlijke som van een samengevoegde tabelkolom verkrijgen

  4. Twee afzonderlijke query's samenvoegen in een postgresql ...query... (al dan niet mogelijk)