私はelasticsearch-phpを使用しています。elasticsearchのスクロールが動作していることを知る方法を教えてください
私はこのコードを使用していますが、テストではうまくいきます。
require_once 'app/init.php';
if (isset($_GET['q'])) {
$q = $_GET['q'];
$query= $es->search([
'index' => 'rebajas',
//'search_type' => 'scan',
'scroll' => '2m',
//'from' => 0,
'size' => 1000,
'body'=>[
'query'=>[
'bool' => [
'should' => [
'match'=>['titulo'=>$q],
]
]
]
]
]);
if ($query['hits']['total']>=1) {
$scroll_size = $query['hits']['total'];
$results = $query['hits']['hits'];
//scrol
$scroll_id = $query['_scroll_id'];
print " total results: " . $scroll_size;
$count = 0;
// first set of scroll results
for ($i=0; $i<$scroll_size; $i++) {
$count++;
}
//scroll
while (isset($query['hits']['hits']) && count($query['hits']['hits']) > 0) {
// **
// Do your work here, on the $response['hits']['hits'] array
// **
$conta =0;
foreach ($results as $r) {
$conta++;
?>
<h1 class="mt-5"><a href=""><?php echo $conta." " .$r['_source']['titulo'];?></a> <i class="fa fa-search-plus" aria-hidden="true"></i></h1>
<?php
}
// When done, get the new scroll_id
// You must always refresh your _scroll_id! It can change sometimes
$scroll_id = $query['_scroll_id'];
// Execute a Scroll request and repeat
$query = $es->scroll([
"scroll_id" => $scroll_id, //...using our previously obtained _scroll_id
"scroll" => "30s" // and the same timeout window
]
);
}
}
}
質問は以下のとおりです。このスクロールはどのように機能するの 、それが生産しているとき、およそ1万レコードを抽出し、それは非常に多くのレコードを持つサーバーをブロックしないのだろうか? どのように読み込まれているか確認できますか? これは、無限のスクロールと同じように機能します。つまり、ページが下がると、レコードがロードされます。
私はelasticsearch情報をウェブページに表示する必要があります。これはページングを行うことが重要ですが、私はその方法を見つけていません。 – Vacanito
単純なページングをしようとしている場合は、from/size https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.htmlを使用してみてください。比較的高価であると呼ばれる。しかし、基本的には、すでに見たレコード数とサイズ=をあなたのページサイズに使用します。 – Cheruvian
ありがとう@Cheruvian、私はあなたが私に与えた情報をうまく処理しました。 – Vacanito