快速上手

快速开始

这一节会概述一下客户端的安装,还有一些主要方法的使用规则。

安装

  • composer.json 文件中引入 elasticsearch-php:
  1. {
  2. "require": {
  3. "elasticsearch/elasticsearch": "~6.0"
  4. }
  5. }
  • 安装 Composer:
  1. curl -s http://getcomposer.org/installer | php
  2. php composer.phar install --no-dev
  • 在项目中引入自动加载文件,并且实例化一个客户端:
  1. require 'vendor/autoload.php';
  2. use Elasticsearch\ClientBuilder;
  3. $client = ClientBuilder::create()->build();

索引一个文档

在 elasticsearch-php 中,几乎一切操作都是用关联数组来配置,其中包括 REST 路径(endpoint)、文档和可选参数等。

为了索引一个文档,我们要指定4部分信息:index,type,id 和一个文档的 body。构建一个键值对的关联数组就可以完成上面的内容。body 一般是键值对的数组内容,格式与原文档的数据保持一致即可:

  1. $params = [
  2. 'index' => 'my_index',
  3. 'type' => 'my_type',
  4. 'id' => 'my_id',
  5. 'body' => ['testField' => 'abc']
  6. ];
  7. $response = $client->index($params);
  8. print_r($response);

收到的响应数据表明,你指定的索引中已经创建好了文档。响应数据是一个关联数组,里面的内容是 Elasticsearch 返回的 decoded JSON 数组格式的数据:

  1. Array
  2. (
  3. [_index] => my_index
  4. [_type] => my_type
  5. [_id] => my_id
  6. [_version] => 1
  7. [created] => 1
  8. )

获取一个文档

现在获取刚才索引的文档:

  1. $params = [
  2. 'index' => 'my_index',
  3. 'type' => 'my_type',
  4. 'id' => 'my_id'
  5. ];
  6. $response = $client->get($params);
  7. print_r($response);

响应数据包含一些元数据(如 index,type 等)和 _source 字段, 这是我们上面发送给 Elasticsearch 的原始文档数据:

  1. Array
  2. (
  3. [_index] => my_index
  4. [_type] => my_type
  5. [_id] => my_id
  6. [_version] => 1
  7. [found] => 1
  8. [_source] => Array
  9. (
  10. [testField] => abc
  11. )
  12. )

搜索一个文档

搜索是 elasticsearch 的主推功能,接下来我们试一下执行一个搜索。我们准备用 Match 查询来作为示范:

  1. $params = [
  2. 'index' => 'my_index',
  3. 'type' => 'my_type',
  4. 'body' => [
  5. 'query' => [
  6. 'match' => [
  7. 'testField' => 'abc'
  8. ]
  9. ]
  10. ]
  11. ];
  12. $response = $client->search($params);
  13. print_r($response);

这个响应数据与前面例子的响应数据有所不同。新增了一些元数据(如 took, timed_out 等)和一个 hits 的数组,这代表了你的搜索结果。而 hits 内部也有一个 hits 数组,内部的 hits 包含单个的搜索结果:

  1. Array
  2. (
  3. [took] => 1
  4. [timed_out] =>
  5. [_shards] => Array
  6. (
  7. [total] => 5
  8. [successful] => 5
  9. [failed] => 0
  10. )
  11. [hits] => Array
  12. (
  13. [total] => 1
  14. [max_score] => 0.30685282
  15. [hits] => Array
  16. (
  17. [0] => Array
  18. (
  19. [_index] => my_index
  20. [_type] => my_type
  21. [_id] => my_id
  22. [_score] => 0.30685282
  23. [_source] => Array
  24. (
  25. [testField] => abc
  26. )
  27. )
  28. )
  29. )
  30. )

删除一个文档

好的,继续。现在删除之前添加的文档:

  1. $params = [
  2. 'index' => 'my_index',
  3. 'type' => 'my_type',
  4. 'id' => 'my_id'
  5. ];
  6. $response = $client->delete($params);
  7. print_r($response);

你会注意到这是与get语法相同的语法。唯一的区别在于操作:delete替换了get。得到的响应证实了文档确实被删除:

  1. Array
  2. (
  3. [found] => 1
  4. [_index] => my_index
  5. [_type] => my_type
  6. [_id] => my_id
  7. [_version] => 2
  8. )

删除索引

由于 Elasticsearch 的动态特性, 我们添加的第一个文档自动构建了一个带有一些默认设置的索引。因为稍后我们要自己指定一些设置,所以现在可以先把这个索引删除:

  1. $deleteParams = [
  2. 'index' => 'my_index'
  3. ];
  4. $response = $client->indices()->delete($deleteParams);
  5. print_r($response);

打印的结果:

  1. Array
  2. (
  3. [acknowledged] => 1
  4. )

创建索引

现在我们重新开始(没有任何数据和索引),我们来添加一个自定义设置的新索引:

  1. $params = [
  2. 'index' => 'my_index',
  3. 'body' => [
  4. 'settings' => [
  5. 'number_of_shards' => 2,
  6. 'number_of_replicas' => 0
  7. ]
  8. ]
  9. ];
  10. $response = $client->indices()->create($params);
  11. print_r($response);

Elasticsearch 会用你自定义的设置创建新索引,并返回一个确认结果:

  1. Array
  2. (
  3. [acknowledged] => 1
  4. )

总结

这只是对客户端及其语法的快速概述。如果您熟悉 elasticsearch, 您将会注意到这些方法的名称与 REST 端点一样。

您还将注意到客户端的配置方法有助于 IDE 轻松发现。所有核心操作到都可以在 $client 对象下可用 (索引, 搜索, 获取, 等)。索引和集群管理都分别位于 $client→indices()$client→cluster() 对象下。

查看其余文档,了解客户端的工作原理。