一个可以充当数据库,并且拥有可以实现全文搜索的搜索引擎的强大工具。
一些概念
-
index
:一个索引,可以看做是关系型数据库的一个库; -
type
:一种类型,可以看做是关系型数据库的一个表; -
id
:可以看做是关系型数据库的主键ID字段;
安装
安装前置条件:
- 已安装完整的WAMP开发环境;
- 已安装可用的ElasticSearch服务端,推荐使用Docker进行安装;
- 在
composer.json
文件中引入elasticsearch.php
:
{
"require" : {
"elasticsearch/elasticsearch": "~6.0"
}
}
- 用
composer
进行安装(需要确保此项目被composer监管):
composer update elasticsearch/elasticsearch
- 在项目中新建一个路由,引入文件,并且实例化一个客户端
use Elasticsearch\ClientBuilder;
// 此步骤在class的function里执行
$client = ClientBuilder::create()->build();
简单使用
索引一个文档(创建一条数据)
$params = [
'index' => 'my_index',
'type' => 'my_type',
'id' => 'my_id',
'body' => ['testField' => 'abc'] // 此条数据的内容,数组可以任意定义。
];
$response = $client->index($params);
print_r($response);
其响应结果为:
Array
(
[_index] => my_index // 创建的index名
[_type] => my_type // 创建的type名
[_id] => my_id // 创建的id名
[_version] => 1
[created] => 1
)
获取一个文档(查询一条记录)
$params = [
'index' => 'my_index',
'type' => 'my_type',
'id' => 'my_id'
];
$response = $client->get($params);
print_r($response);
其响应结果为:
Array
(
[_index] => my_index
[_type] => my_type
[_id] => my_id
[_version] => 1
[found] => 1 //匹配的条数
[_source] => Array
(
[testField] => abc // 内容为我们刚刚设置的内容
)
)
搜索一个文档(全文搜索)
$params = [
'index' => 'my_index',
'type' => 'my_type',
'body' => [
'query' => [ // 查询时必须制定的`query`参数
'match' => [
'testField' => 'abc'
]
]
]
];
$response = $client->search($params);
print_r($response);
其响应结果为:
Array
(
[took] => 1
[timed_out] => // 是否超时
[_shards] => Array
(
[total] => 5
[successful] => 5
[failed] => 0
)
[hits] => Array // 命中的结果
(
[total] => 1 // 总命中数
[max_score] => 0.30685282
[hits] => Array // 命中的数据
(
[0] => Array
(
[_index] => my_index
[_type] => my_type
[_id] => my_id
[_score] => 0.30685282 // 命中的得分
[_source] => Array // 实际的内容
(
[testField] => abc
)
)
)
)
)
删除一个文档(仅删除一条记录)
$params = [
'index' => 'my_index',
'type' => 'my_type',
'id' => 'my_id'
];
$response = $client->delete($params);
print_r($response);
其响应结果为:
Array
(
[found] => 1
[_index] => my_index
[_type] => my_type
[_id] => my_id
[_version] => 2
)
删除索引(删除整个数据库)
由于 Elasticsearch 的动态特性, 我们添加的第一个文档自动构建了一个带有一些默认设置的索引。因为稍后我们要自己指定一些设置,所以现在可以先把这个索引删除:
$deleteParams = [
'index' => 'my_index'
];
$response = $client->indices()->delete($deleteParams);
print_r($response);
其响应结果为:
Array
(
[acknowledged] => 1
)
创建索引
现在我们重新开始来添加一个自定义设置的新索引:
$params = [
'index' => 'my_index',
'body' => [
'settings' => [ // 自定义设置配置
'number_of_shards' => 2, // 数据分片数
'number_of_replicas' => 0 // 数据备份数
]
]
];
$response = $client->indices()->create($params);
print_r($response);
其响应结果为:
Array
(
[acknowledged] => 1
)
网友评论