Full Elasticsearch php (ok)
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/search_operations.html
Xem tất cả type của index trong Elasticsearch (ok)
<?php
$params = [
'index' => 'article'
];
$results = $client->search($params);
echo '<pre>';
var_export($results);
echo '</pre>';
?>
Xem tất cả 1 index (ok)
$response = $client->cat()->indices();
echo '<pre>';
var_export($response);
echo '</pre>';
Xóa all indices
curl -XDELETE localhost:9200/indexname
$action = $_GET['action'] ?? '';
$id = $_GET['id'] ?? '';
if($action == 'delete') {
$params = [
'index' => 'article',
'type' => 'article_type',
'body' => [
'query' => [
"match_all" => (object)[]
]
]
];
$response = $client->deleteByQuery($params);
echo '<pre>';
var_export($response);
echo '</pre>';
}
part 1: Tạo đối tượng Client
<?php
use Elasticsearch\ClientBuilder;
require 'vendor/autoload.php';
//Cấu hình kết nối đến ES
$hosts = [
[
'host' => 'localhost', //yourdomain.com
'port' => '9200',
'scheme' => 'http', //https
// 'path' => '/elastic',
// 'user' => 'username', //nếu ES cần user/pass
// 'pass' => 'password!#$?*abc'
],
];
// Tạo đối tượng Client
$client = ClientBuilder::create()->setHosts($hosts)->build();
part 2: Tạo một Document trong Index
// Tạo một Document
$params = [
'index' => 'article', // Index lưu Document
'id' => '1', //Nếu thiếu id thì ID tự sinh
'type' => 'article_type'
'body' => [
'testkey' => 'testvalue'
], //Dữ liệu Document
];
$response = $client->index($params);
echo '<pre>';
var_export($response);
echo '</pre>';
part 3: Kiểm tra xem Index đã tồn tại không
// //Kiểm tra xem Index đã tồn tại không
$params = [
'index' => 'article',
];
$indexExist = $client->indices()->exists($params);
if (!$indexExist) {
try {
//Thực hiện tạo Index
$response = $client->indices()->create($params);
} catch (Exception $e) {
//Lỗi tạo Index
$res = json_decode($e->getMessage());
echo $res->error->reason;
}
} else {
echo "Index {$params['index']} đã có rồi!";
}
part 4: Cập nhật Document
// Cập nhật Document
$params = [
'index' => 'article',
'type' => 'article_type',
'id' => '1',
'body' => [
'doc' => [
'testkey1' => 'valueabc',
'new_field' => 'abc'
]
]
];
$response = $client->update($params);
echo '<pre>';
var_export($response);
echo '</pre>';
part 5: Xóa một Document trong Index
$params = [
'index' => 'article',
'type' => 'article_type',
'id' => '1'
];
$response = $client->delete($params);
echo '<pre>';
var_export($response);
echo '</pre>';
part 6: Lập chỉ mục nhiều Document
$params = [
'body' => [
['index' =>
[
'_index' => 'article',
'_type' => 'article_type',
],
],
[
'testkey1' => 'value1',
'testkey2' => 'testkey2',
],
['index' => [
'_index' => 'article',
'_type' => 'article_type'
],
],
[
'testkey1' => 'value11',
'testkey2' => 'testkey22',
],
],
];
$responses = $client->bulk($params);
echo '<pre>';
var_export($responses);
echo '</pre>';
Part 7. Tìm kiếm phức tạp hơn với logic should, must ...
$params = [
'index' => 'article',
'type' => 'article_type',
'body' => [
'query' => [
'bool' => [
'filter' => [
'term' => [
'testkey1' => 'value11'
],
],
'should' => [
[
'match' => [
'testkey1' => 'value1',
],
],
[
'match' => [
'testkey2' => 'value2',
],
],
],
],
],
],
];
$results = $client->search($params);
echo '<pre>';
var_export($results);
echo '</pre>';
Part 8. Kỹ thuật scroll để lấy hết kết quả tìm kiếm (chưa hoàn thành)
// Kỹ thuật scroll để lấy hết kết quả tìm kiếm (chưa hoàn thành)
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'scroll' => '1m', // Giữ con trỏ tìm kiếm tồn tại 1m để truy vấn trang tiếp theo
// 'size' => 10000, // mỗi trang 1000 kết quả
// 'body' => [
// 'query' => [
// 'match' => [
// 'testkey' => 'testvalue',
// ],
// ],
// ],
// ];
// $response = $client->search($params); // Truy vấn đầu tiên
// while (isset($response['hits']['hits']) && count($response['hits']['hits']) > 0) {
// // **
// // Viết code xử lý kết quả trả về (đọc) - foreach ($rs['hits']['hits'] as $r)
// // **
// // Khi hoàn thành, lấy scroll_id để lấy kết quả trang tiếp (như 10000 kết quả tiếp theo)
// $scroll_id = $response['_scroll_id'];
// // Thực hiện cuộn tới kết quả tiếp theo
// $response = $client->scroll([
// 'scroll_id' => $scroll_id,
// 'scroll' => '30s', // thiết lập con trỏ tồn tại tiếp 30s
// ]
// );
// }
Part 9: Get all indices (ok)
<?php
use Elasticsearch\ClientBuilder;
require 'vendor/autoload.php';
$hosts = [
[
'host' => 'localhost',
'port' => '9200',
'scheme' => 'http'
],
];
$client = ClientBuilder::create()->setHosts($hosts)->build();
$response = $client->cat()->indices();
echo '<pre>';
var_export($response);
echo '</pre>';
?>
Đây là một ví dụ hoàn chỉnh code (ok)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Logo</a>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="/?action=create">Create</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/?action=delete">Delete</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/?action=update">Update</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/?action=search">Search</a>
</li>
</ul>
</div>
</nav>
<?php
use Elasticsearch\ClientBuilder;
require 'vendor/autoload.php';
$hosts = [
[
'host' => 'localhost',
'port' => '9200',
'scheme' => 'http'
],
];
$client = ClientBuilder::create()->setHosts($hosts)->build();
?>
<?php
// $response = $client->cat()->indices();
// echo '<pre>';
// var_export($response);
// echo '</pre>';
?>
<?php
// $params = [
// 'index' => 'article'
// ];
// $results = $client->search($params);
// echo '<pre>';
// var_export($results);
// echo '</pre>';
?>
<?php
// Xem một index
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'id' => '1'
// ];
// $results = $client->get($params);
// echo '<pre>';
// var_export($results);
// echo '</pre>';
?>
<?php
$action = $_GET['action'] ?? '';
$id = $_GET['id'] ?? '';
if($action == 'delete') {
// Delete allindex
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'body' => [
// 'query' => [
// "match_all" => (object)[]
// ]
// ]
// ];
// $response = $client->deleteByQuery($params);
// echo '<pre>';
// var_export($response);
// echo '</pre>';
// Delete a index
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'id' => '1'
// ];
// $response = $client->deleteByQuery($params);
// echo '<pre>';
// var_export($response);
// echo '</pre>';
}
else if($action == 'update') {
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'id' => '1',
// 'body' => [
// 'doc' => [
// 'testkey1' => 'testkey1'
// ]
// ]
// ];
// $response = $client->update($params);
// echo '<pre>';
// var_export($response);
// echo '</pre>';
}else if($action == 'create') {
// $params = [
// 'index' => 'article',
// 'type' => 'article_type',
// 'id' => '1',
// 'body' => [
// 'testkey' => 'testvalue'
// ]
// ];
// $response = $client->index($params);
// echo '<pre>';
// var_export($response);
// echo '</pre>';
}
else if($action == 'search') {
$params = [
'index' => 'article',
'type' => 'article_type',
'body' => [
'query' => [
'bool' => [
'should' => [
['match' => ['testkey' => 'testvalue']],
['match' => ['testkey' => 'test']]
]
]
]
]
];
$response = $client->search($params);
echo '<pre>';
var_export($response);
echo '</pre>';
}
?>
</body>
</html>
Đọc thêm phần 5, phần 6
Last updated