1

当我尝试使用 laravel 索引我的文档时出现错误。

这是我的主要代码。通过使用 die 语句,我知道我在执行第一行后立即收到此错误“[MongoDB\Driver\Exception\InvalidArgumentException] Integer overflow detected on your platform: 300000000000”:$users = User::all ();

$users = User::all();
foreach ($users as $user) {
        $temp=$user['attributes']; 
        unset($temp['_id']);
             $params = [
              'index' => 'test_index',
              'type' => $temp['vehicle_type'],
          'id' => $temp['lid'],
          'body' => $temp
        ];
        print_r($params); die;
     $response = $client->index($params);
     set_time_limit(100);
 }
    }``

我正在使用https://github.com/jenssegers/laravel-mongodb来连接 Laravel 和 mongoDB。我的用户模型看起来像这样

use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class User extends Eloquent 
{
    protected $connection = 'mongodb';
    protected $collection = 'Test4';  
}

Test4 包含大数据。但是,我确保我的映射中没有任何可能导致整数溢出错误的整数。请帮帮我。我是 Laravel 和 MongoDB 的新手,我很乐意提供任何可能需要的进一步信息。

此外,当我尝试减少映射和索引中的字段数时,我收到此错误“PHP 致命错误:C:\xampp\htdocs\ProTest1\vendor\ 中允许的内存大小为 134217728 字节已用尽(尝试分配 40 字节) jenssegers\mongodb\src\Jenssegers\Mongodb\Query\Builder.php 在第 392 行"

4

1 回答 1

0

感谢 Neil Lunn,您的反馈真的很有帮助。实际上,我一次访问所有数据,这会消耗大量内存。因此,我尝试使用下面的代码一次提取大量数据,这很有效。

User::chunk(100, function ($users) {
    foreach ($users as $user) {
    $temp=$user['attributes']; 
    unset($temp['_id']);
         $params = [
          'index' => 'test_index',
          'type' => $temp['type'],
          'id' => $temp['lid'],
          'body' => $temp
        ];
     $client = Elasticsearch::create()->build();
     $response = $client->index($params);
  }
});
于 2017-06-26T10:32:59.330 回答