PHP Ruflin / Elastica-如何在大数据插入时刷新索引

时间:2018-10-11 18:01:55

标签: php elasticsearch indexing elastica

我需要在Elasticsearch数据库中插入约150万个文档。我通过this example (BULK example)

通过PHP库Elastica来完成此操作

我想知道在批量插入的最后是否可以使用调用$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个文档插入elasticsearch然后调用$elasticaType->getIndex()->refresh();

1 个答案:

答案 0 :(得分:0)

  

是否可以将1500000个文档插入elasticsearch然后   呼叫$ elasticaType-> getIndex()-> refresh();?

绝对可以。

refresh使您的文档可供搜索。此机制派生自Apache Lucene,可提供近实时(NRT)搜索功能,它使用DirectoryReader.openIfChanged重新打开索引。

通常您不必自己做,定期安排刷新  默认情况下,您可以将refresh_interval的值更改为更短的时间以进行NRT搜索,或更长的时间以提高性能。