Итак, у меня есть запрос, который дает мне в результате 500 сотен тысяч данных, а затем я зацикливаюсь на нем, чтобы добавить 20 документов для каждого результата. Эластичный поиск перестает отвечать (страница загружается вечно), а затем выдает ошибку Couldn't connect to host, Elasticsearch down?
. Таким образом, при переборе всех данных происходит сбой.
Что может быть причиной того, что Elastic search не отвечает? Разве я не могу использовать его, чтобы просмотреть миллионы информации? Это проблема конфигурации Elasticserch?
Вот код, который я использую для цикла:
$query = tep_db_query("
// Query giving 500k results
");
$achatsDocs = array();
while($array_collections = tep_db_fetch_array($query)){
//looping the query
$achatsDocs[] = new \Elastica\Document('', \Glam\HttpUtils::jsonEncode(
array(
// documents
)
));
}
$achatsReportType->addDocuments($achatsDocs);
$achatsReportType->getIndex()->refresh();
Мне сказали отправить разумное количество документов, т.е. 1000 за массовый запрос, а не все сразу. Итак, я сделал это:
// while we didn't loop through every data
while(condition) {
$query = tep_db_query("
// get first/next 1000
");
// put data inside first 1000
while($array_collections = tep_db_fetch_array($query))
$achatsDocs[] = new \Elastica\Document('', \Glam\HttpUtils::jsonEncode(
array(
// 20 documents
)
));
}
$achatsReportType->addDocuments($achatsDocs);
$achatsReportType->getIndex()->refresh();
// go over next 1000
$limit_start = $limit_start + 1000;
$limit_end = $limit_end + 1000;
}
Но он все еще падает даже после этого. Это приводит к добавлению 70 000 результатов перед сбоем с этой ошибкой:
Fatal error: Uncaught exception 'Elastica\Exception\Connection\HttpException' with message 'Unknown error:52' in /var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php:167 Stack trace: #0 /var/www/vendor/ruflin/elastica/lib/Elastica/Request.php(171): Elastica\Transport\Http->exec(Object(Elastica\Request), Array) #1 /var/www/vendor/ruflin/elastica/lib/Elastica/Client.php(621): Elastica\Request->send() #2 /var/www/vendor/ruflin/elastica/lib/Elastica/Bulk.php(360): Elastica\Client->request('_bulk', 'PUT', '{"index":{"_ind...', Array) #3 /var/www/vendor/ruflin/elastica/lib/Elastica/Client.php(314): Elastica\Bulk->send() #4 /var/www/vendor/ruflin/elastica/lib/Elastica/Index.php(150): Elastica\Client->addDocuments(Array) #5 /var/www/vendor/ruflin/elastica/lib/Elastica/Type.php(196): Elastica\Index->addDocuments(Array) #6 /var/www/htdocs/adm54140/achatsReport_map.php(280): Elastica\Type->addDocuments(Array) #7 {main} thrown in /var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php on line 167 array(4) { ["code"]=> string(7) "E_ERROR" ["message"]=> string(928) "Uncaught exception 'Elastica\Exception\Connection\HttpException' with message 'Unknown error:52' in /var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php:167 Stack trace: #0 /var/www/vendor/ruflin/elastica/lib/Elastica/Request.php(171): Elastica\Transport\Http->exec(Object(Elastica\Request), Array) #1 /var/www/vendor/ruflin/elastica/lib/Elastica/Client.php(621): Elastica\Request->send() #2 /var/www/vendor/ruflin/elastica/lib/Elastica/Bulk.php(360): Elastica\Client->request('_bulk', 'PUT', '{"index":{"_ind...', Array) #3 /var/www/vendor/ruflin/elastica/lib/Elastica/Client.php(314): Elastica\Bulk->send() #4 /var/www/vendor/ruflin/elastica/lib/Elastica/Index.php(150): Elastica\Client->addDocuments(Array) #5 /var/www/vendor/ruflin/elastica/lib/Elastica/Type.php(196): Elastica\Index->addDocuments(Array) #6 /var/www/htdocs/adm54140/achatsReport_map.php(280): Elastica\Type->addDocuments(Array) #7 {main} thrown" ["file"]=> string(63) "/var/www/vendor/ruflin/elastica/lib/Elastica/Transport/Http.php" ["line"]=> int(167) }
И тогда эластичный поиск падает.