[英]how can I know that the scroll in elasticsearch if it works
我正在使用elasticsearch-php。
我使用此代码,在我做的测试中效果很好。
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
]
);
}
}
}
问题是:此滚动条在生产时如何工作,提取大约一万条记录,会不会阻塞这么多记录的服务器? 我如何检查正在加载什么? 这与无限滚动的工作原理相同,也就是说,当我向下浏览页面时,将加载记录。
这是一个问题吗,如何实现由elasticsearch支持的无限滚动? 这是整个课堂/框架中值得提出的问题。 但是,让我刺一下它。
如果您想无限滚动,则可能需要先从Web服务端点中断开数据API(即,数据不应该随页面一起加载[您可能希望第一页随页面一起提供,但是它不需要,并且要加载下一页,您几乎肯定会希望将其作为自己的API])。 然后,当用户向下滚动网页时,您将需要AJAX请求页面(即,如果用户滚动到n / PAGE_SIZE,则请求下一页)。 您基本上可以使用Google“无限滚动实现”,但这可以很好地捕捉意图 。
话虽这么说,对于Elasticsearch(将ES用作网站的直接无限滚动支持),这通常不是一个好用例。 大部分原因都封装在这里 。 基本上可以归结为这样的事实:在弹性搜索中拥有很多打开的滚动条是昂贵的,尽管如果您的用户很少并且超时很严格,那可以吗? 滚动条不是用于“实时”使用的,而是用于数据导出用例的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.