2017-03-28 6 views
0

私は、約47kレコードのテーブル全体を弾性検索にインデックスしようとしています。これは大量のデータではありません。いずれにせよ、私はESコンソールの出力の「update_mapping」の5回目で、塊のサイズにかかわらず、雄弁にレコードをチャンクしています。すべてが停止します。ラベリングのデータをelasticsearchにインデックスする問題

これをデバッグするのに必要な情報が100%わからないので、私はすべてをカバーしようとします。

ララベル5.2は、スコッチ・バグラン画像を実行している迷惑な機械の中でホストされています。

私は弾性検索からの公式のドッキングウィンドウの画像を使用しています:

docker run -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" docker.elastic.co/elasticsearch/elasticsearch:5.2.1 

をESで作業するために、私は彼らの公式パッケージを使用しています。

"elasticsearch/elasticsearch": "^5.1" 

私は立ち上がって実行し、このチュートリアルを使用:私のcomposer.jsonで https://michaelstivala.com/learning-elasticsearch-with-laravel/

(。ラッパー「強化し」を含む)

、私は彼のクラスにメソッドを追加しましたデバッグエフェクタとして:

public function createIndex($params) { 
    return $this->client->indices()->create($params); 
} 

私はすぐにcreateIndexメソッドを使用します。

は私がホスト情報を含めるように彼のプロバイダーregisterメソッドを変更する必要がありました。これにより

public function register() 
{ 

    $hosts = [ 
     [ 
      'host' => '10.0.2.2', // the host ip from inside vagrant 
      'port' => '9200', 
      'scheme' => 'http', 
      'user' => 'elastic', // yeah I know, change this. 
      'pass' => 'changeme' // I will. 
     ] 
    ]; 


    $this->app->bind(Elastic::class, function ($app) use ($hosts) { 
     return new Elastic(
      ClientBuilder::create() 
       ->setHosts($hosts) 
       ->build() 
     ); 
    }); 
} 

を、私は、私のlaravelプロジェクトを実行しているElasticsearchを持っています。インデックス作成について

$elastic = app(Elastic::class); 

// Table Causes has 84 records. 
Causes::chunk(100, function ($causes) use ($elastic) { 
    foreach ($causes as $cause) { 
     $elastic->index([ 
      'index' => 'pwi', 
      'type' => 'cause', 
      'id' => $cause->cause_id, 
      'body' => $cause->toArray() 
     ]); 
    } 
}); 

// Table Country has 248 records. 
Country::chunk(100, function ($countries) use ($elastic) { 
    foreach ($countries as $country) { 
     $elastic->index([ 
      'index' => 'pwi', 
      'type' => 'country', 
      'id' => $country->country_id, 
      'body' => $country->toArray() 
     ]); 
    } 
}); 

これらのインデックスは問題ありません。今は大きなものです。

// Table Organizations has 47066 records. 
Organizations::chunk(5000, function ($organizations) use ($elastic) { 
    foreach ($organizations as $organization) { 
     $elastic->index([ 
      'index' => 'pwi', 
      'type' => 'organization', 
      'id' => $organization->org_id, 
      'body' => $organization->toArray() 
     ]); 
    } 
}); 

私は上記のように構成されたすべての3つのインデックスを実行し、これは私がドッキングウィンドウのコンソールウィンドウに関係なく、チャンクサイズの組織の場合

[2017-03-28T19:22:11,305][INFO ][o.e.c.m.MetaDataCreateIndexService] [knre-px] [pwi] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [] 
[2017-03-28T19:22:11,443][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] create_mapping [cause] 
[2017-03-28T19:22:16,190][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] create_mapping [country] 
[2017-03-28T19:22:16,604][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [country] 
[2017-03-28T19:22:29,088][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] create_mapping [organization] 
[2017-03-28T19:22:29,375][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [organization] 
[2017-03-28T19:22:29,453][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [organization] 
[2017-03-28T19:22:30,309][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [organization] 
[2017-03-28T19:22:30,717][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [organization] 
[2017-03-28T19:22:33,247][INFO ][o.e.c.m.MetaDataMappingService] [knre-px] [pwi/Jswi4XuJTyqj56edsNfjfg] update_mapping [organization] 

、で取得出力され、その第五になります更新マッピング、それはすべてが停止する場所です。 10のチャンク、または5000の同じ結果のチャンク。ブラウザウィンドウはまだ回転しています。コンソールには何も出力されません。ただそこに座って、最終的に最大実行時間がエラーを超えてしまいました。私はそのCREATEINDEXメソッドを使用して、断片数を増加しようとしている

は、Iインデックスは何も前に私が実行します。最終結果を変更せずに

$params = [ 
    'index' => 'pwi', 
    'body' => [ 
     'settings' => [ 
      'number_of_shards' => 10 
     ], 
    ] 
]; 

$elastic->createIndex($params); 

。これを実行する

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 

::私はドッキングウィンドウの画像をアップし始めたとき、私はこのエラーを持っていた

にsudoのsysctl -w VM。max_map_count = 262144

https://github.com/docker-library/elasticsearch/issues/111) 修正済みです。

データには問題ありません。チャンクサイズが10の場合は同じレコードにスタックされず、次にチャンクサイズが5000の場合チャンクサイズは5000です。

私はElasticquentパッケージを使用していました(ES 2.4のみを使用していました)私が組織テーブルをインデックスに登録したときと同じ問題です。 200のチャンクを使用してそれを過ぎても(現在のプロセスではないが)。私はタイプ間で検索する必要があり、私はそれを簡単に行うパッケージを見つけることができないので、私はそれを自分で行うことに決めました。インデックスリクエストをキャンセルして、検索コードの使用を開始した場合(インデックスに登録されていないものをインデックスに登録していない場合)、すべて正常に動作します。

私が賭け人だった場合、私の設定に何か問題があると言います。またはES/Dockerサーバー。残念ながら私はgoogleに何がわからない。レコードの47kは多くないです...そうですか?それで私は何が欠けているのですか?

このすべてをお読みいただきありがとうございます。私は助けていただきありがとうございます。

[編集]

私はコードを変更:

Organizations::chunk(200, function ($organizations) use ($elastic) { 
    foreach ($organizations as $organization) { 
     $elastic->index([ 
      'index' => 'pwi', 
      'type' => 'organization', 
      'id' => $organization->org_id, 
      'body' => [ 
       "org_name" => $organization->org_name, 
       "org_desc" => $organization->org_desc, 
      ] 
     ]); 
    } 
}); 

そして今、最初のマップを作成し過ぎて、それが取得していません:

[2017-03-28T20:00:14,543][INFO ][o.e.c.m.MetaDataCreateIndexService] [eBlAEK7] [pwi] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [] 
[2017-03-28T20:00:14,668][INFO ][o.e.c.m.MetaDataMappingService] [eBlAEK7] [pwi/Fqj91gS9Q6CBfl4z2ZNvXw] create_mapping [organization] 

答えて

0

を一時的な解決策が増加したが実行時間。

ini_set('max_execution_time', 600); 

は多分ちょうどその遅い浮浪者ですか? 47kのレコードを索引付けするのに8分かかりました。

いずれにせよ、これは解決策でした。私は最高ではない気がしますか?

関連する問題