我是elasticsearch的新手。
我尝试制作真正的应用。我正在使用elasticsearch-php
https://github.com/elastic/elasticsearch-php
我不知道要做分页。
我的代码:
<?php
require_once 'app/init.php';
if(isset ($_GET['q'])) {
$q = $_GET['q'];
$query = $es->search([
'index' => 'user',
'type' => 'profile',
'body' => [
'query' => [
'bool' => [
'should' => [
'match' => ['bio' => $q]
]
]
]
]
]);
if ($query['hits']['total'] >=1) {
$results= $query['hits']['hits'];
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Search | ES</title>
</head>
<body>
<form class="" action="index.php" method="get" autocomplete="off">
<label for="">
Search
<input type="text" name="q">
</label>
<input type="submit" value="search">
</form>
<?php
if (isset($results)) {
foreach ($results as $r) {
?>
<div class="result">
<?php echo $r['_source']['bio']; ?>
</div>
<?php
}
}
?>
</body>
</html>
以及如何制作这样的分页:
答案 0 :(得分:3)
这里需要两件事,总页数以及从一个页面导航到另一个页面的方式。
当您使用简单的static int foo(long n, int k) { //n-th element (indexed from 0) in k-th sequence
if(n==0 && k==0) return 0;
long length = (1L << k) - 1;
if(n < length) return foo(n, k-1);
if(n == length) return 0;
return 1 - foo(n-length-1, k-1);
}
它返回响应JSON中的命中数,即结果总数。将它们除以您想要在应用程序上显示的结果数量,您将获得页面。
在PHP-elasticsearch请求对象中使用from和size属性,并在页面之间导航时不断更改。示例查询(考虑第3页和页面大小10)
Query->filter->bool