Py学习  »  Elasticsearch

ElasticSearch 2+PHP滚动流问题

Čamo • 6 年前 • 1541 次点击  

嗨,有人能告诉我如何通过php ruflin\elastica库在elasticsearch 2上执行滚动吗? 根据 documentation 对于ES2,第一个滚动请求应该指向特定的索引,而下一个请求在没有索引的情况下调用,只使用scroll_id参数。 所以我写了这个代码:

/** @var Elastica\Client $elastic */
$elastic = $container->getService( 'elastica' );

// This first call works fine. I get the scroll_id.
$elasticScrollData = $elastic->getIndex( 'event' )->request( '_search?scroll=5m', 'GET', ['size' => 500, 'sort' => ['_doc']] )->getData();

$countAll = $elasticScrollData['hits']['total'];

saveToMongo( $elasticScrollData, $countAll, $elastic );


function saveToMongo( $scrollData, $countAll, \Elastica\Client $elastic )
{
    $documents = [];
    foreach ( $scrollData['hits']['hits'] as $item )
    {
        $doc = [];
        $doc['ico'] = (array)$item['_source']['ico'];
        ...         

        $documents[] = $doc;
    }

    try
    {
        saveDataToDb( $documents );
    }
    catch( \Exception $e )
    {
        echo '+++ insert exception: ' . $e->getMessage() . "\n";
    }

    // Here is the problem. It throws me an exception: No enabled connection
    $scrollData = $elastic->request( '_search/scroll', 'GET', ['scroll' => '5m', 'scroll_id' => $scrollData['_scroll_id']] )->getData();

    saveToMongo( $scrollData, $countAll, $offset, $elastic, $mongoCollection );
}

第二次调用ElasticSearch有什么问题?为什么抛出错误:没有启用的连接?希望有人知道,因为我真的不知道。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39167
 
1541 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Gasol
Reply   •   1 楼
Gasol    6 年前

这个 Elastica\Client 默认情况下,使用循环连接池来解决连接问题,如果所有连接都不存在,它将引发 ClientException 带消息 No enabled connection 1 .

检查PHP脚本和ElasticSearch之间的网络连接,并查看ElasticSearch的配置。