PHP Ruflin / Elastica - как обновить индекс для вставки огромных данных - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно вставить около 1,5 миллионов документов в базу данных Elasticsearch.Я делаю это через PHP-библиотеку Elastica согласно этому примеру (пример BULK)

Я хотел бы знать, возможно ли использовать команду call $elasticaType->getIndex()->refresh(); в самом конце вставки массива иесли это безопасно и быстрее, чем звонить $elasticaType->getIndex()->refresh(); после каждой массовой отправки.Я имею в виду что-то вроде этого:

$offset = 0;
$limit = 500;
$sum = 1500000,

while( $offset < $sum )
{        
    $documents = [];
    $rows = $sqlDatabase->getData( $offset, $limit )

    foreach( $rows as $row )
    {
        $docData = ['name' => $row->name, 'email' => $row->email]
        $documents[] = new \Elastica\Document( $data->id, $docData );
    }

    $elasticaType->addDocuments( $documents );
    $offset += 500;
    // Source example has refresh here. After every 500 items. But I wont it at the very end of the code after all 1500000 item are in the database.
    // $elasticaType->getIndex()->refresh();
}

$elasticaType->getIndex()->refresh();  // This is what I want.

Можно ли вставить 1500000 документов вasticsearch и затем вызвать $elasticaType->getIndex()->refresh();?

1 Ответ

0 голосов
/ 23 октября 2018

Возможно ли вставить 1500000 документов вasticsearch и затем вызвать $asticaType-> getIndex () -> refresh ();?

Определенно да.

refresh делает ваш документ доступным для поиска. Этот механизм создан на основе Apache Lucene для обеспечения возможностей поиска почти в реальном времени (NRT). Он использует DirectoryReader.openIfChanged для повторного открытия индекса.

Обычно вам не нужно делать это самостоятельно, по умолчанию периодическое обновление запланировано. Вы можете изменить значение refresh_interval на более короткое время для поиска NRT или больше для производительности.

...