Enterprise:如何使用 PHP 客户端将数据提取到 App Search 中
Posted 中国社区官方博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Enterprise:如何使用 PHP 客户端将数据提取到 App Search 中相关的知识,希望对你有一定的参考价值。
在我之前的文章 “Enterprise:如何使用 Python 客户端将数据提取到 App Search 中”,我提到了如何使用 Python 客户端将数据提取到 Elastic 的 App Search 中。在今天的文章中,我将介绍如何使用 php 客户端来做同样的事。
如上所示,在实际的使用中,我们的数据文档被保存一下一个数据库,比如 Postgres 数据库中。我们可以通过 PHP 客户端把里面的数据提前处理,并导入到 App Search 中。
在本次练习中,我将 Elasticsearch,Kibana,PHP,Postgres 都安装于同样一个 Mac 电脑上。
安装
Postgres
如果你在自己的电脑上还没有安装过 Postgres 数据库,你需要根据自己的操作系统进行安装。我们使用 Postgres 创建一个简单的 testdb 数据库,并且它里面含有如下的几个文档:
Elasticsearch
我们首先按照文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 来安装 Elasticsearch。
Kibana
我们按照文章 “Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana” 来安装 Kibana。在本次的练习中,Kibana 的安装可以是不必要的。
配置安全
我们按照文章 “Elasticsearch:设置 Elastic 账户安全” 为我们的集群配置安全。等我们配置完毕后,我们重新进入 Kibana 时需要使用用户名及密码来进行登录。为方便起见,我们为用户 elastic 设置的密码为 password。
安装 App Search
我们到地址 Download Elastic Enterprise Search | Elastic 下载最新的 App Search (当前的最新版本为7.13)。如果你想下载之前的版本,请点击链接 Past Releases of Elastic Stack Software | Elastic。我们需要 enterprise-search 的版本和 Elasticsearch 及 Kibana 的版本一致。
在上面的下载链接中,它很清楚地描述了如何安装 Enterprise Search。简单地说,
修改 Elasticsearch 的配置
我们需要添加如下的设置到 Elasticsearch 的配置中:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
上面的第一个设置在我们配置安全的时候已经设置过了,所以我们只需要配置第二个设置即可。配置完毕后,我们重新启动 Elasicsearch。
安装 Enterprise Search
我们接着下载和 Elasticsearch 版本一致的 Enterprise Search,并使用如下的命令来对它进行解压缩:
tar xzf enterprise-search-7.13.0.tar.gz
我们进入到解压缩后的目录中,并对它的配资文件 config/enterprise-search.yml 进行修改:
config/enterprise-search.yml
ent_search.auth.source: standard
elasticsearch.username: elastic
elasticsearch.password: ELASTIC_USER_PASSWORD
allow_es_settings_modification: true
我们添加如上的配置到 enterprise-search.yml 文件中去。记得修改其中的 ELASTIC_USER_PASSWORD 为自己的 Elasticsearch 安全设置中配置的密码。
同时,我们也必须天如下的配置:
secret_management.encryption_keys: [ENCRYPTION_KEY_1, ENCRYPTION_KEY_2, ...]
我们必须至少设置一个 encryption key 到上面的设置中。但是我们不知道该设置什么样的值,那该怎么办呢?
我们先不配置该设置,我们直接在命令行中打入如下的命令来启动 enterprise-search:
ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search
在这里,我们可以取一个我们喜欢的密码。在上面,为了方便,我取 passwordexample 为密码。当 enterprise-search 开启启动的时候,我们可以看到如下的输出:
在上面的输出中,它显示了一个推荐的设置。我们把上面的设置拷贝下来,并添加到 config/enterprise-search.yml 的配置文件中。我们再次重新启动 enterprise-search:
ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search
在上面命令启动的过程中,我们可以看到如下的输出:
为了能够保存 session,我们可以把上面的 secret_session_key 添加到 config/enterprise-search.yml 中去。
在启动的过程中,我们可以看到 enterprise_search 的用户名及密码:
我们需要记下这个用户名及密码。
添加完毕后,我们重新启动:
ENT_SEARCH_DEFAULT_PASSWORD=passwordexample bin/enterprise-search
第一次启动它需要较长的时间来进行初始化的动作。我们需要耐心等待一段时间,直至它完全启动起来。我们打开浏览器的地址 http://localhost:3002:
我们打入之前设置的密码,并点击 Log In:
这样我们的 Enterprise Search 安装已经完成了。
修改 Kibana 配置
如果我们希望在 Kibana 中能访问 enterprise search,那么我们需要修改 Kibana 的配置文件。添加如下的配置到 kibana.yml 的最后一行:
config/kibana.yml
enterpriseSearch.host: http://localhost:3002
你需要根据自己的 enterprise search 的 IP 地址来进行设置。修改完这个配置后,我们需要重新启动 Kibana。这样我们就可以在 Kibana 中查看到 App Search:
也就是说,我们可以直接从 Kibana 中来创建 engine,而不用访问 http://localhost:3002。
在接下来的练习中,我们还是描述从 http://localhost:3002 网页中进行的步骤。
创建 engine
我们为 App Search 应用创建一个 engine。我们点击如上所示的 Launch App Search:
在上面,我们创建一个叫做 postgres 的 engine:
我们在上面的位置可以找到 Private API Key。这个 Private API Key 将在我们一下的代码中会被使用到。 在上面,我们创建了一个叫做 postgress 的 engine。
开发 PHP 客户端
在 Mac 电脑上,我们可以通过如下的方式来安装 PHP。我们在 terminal 中打入如下的命令:
brew tap shivammathur/php
如果你先前还没安装 brew,请先按照 brew 后再执行上面的命令。然后通过如下的方式来安装所需要的 PHP 版本:
brew install shivammathur/php/php@8.0
在上面,我们安装 PHP 8.0 版本。等安装完毕后,我们可以通过如下的命令来查看 PHP 的版本:
$ php --version
PHP 8.0.10 (cli) (built: Aug 26 2021 00:15:07) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.10, Copyright (c) Zend Technologies
with Zend OPcache v8.0.10, Copyright (c), by Zend Technologies
通过运行以下命令从 getcomposer.org 网站下载 composer 二进制文件。 它将在当前目录中创建一个 composer.phar 文件。
curl -sS https://getcomposer.org/installer | php
现在,将这个 composer.phar 文件复制到 bin 目录下,使其在系统中的任何地方都可用。 另外,设置文件的执行权限。 为了方便使用,我已将文件名从 composer.phar 更改为 composer。
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
我们接下来创建一个项目目录 enterprise-search。然后根据 Elastic 的官方资料,我们接着安装 Enterprise Search 客户端:
composer require elastic/enterprise-search
这样在我们的项目目录中可以看到一个叫做 vendor 的子目录:
我们接着在该目录下创建一个叫做 ingest.php 的文件:
ingest.php
<?php
require_once "vendor/autoload.php";
use Elastic\\EnterpriseSearch\\Client;
use Elastic\\EnterpriseSearch\\AppSearch\\Request;
$private_key = 'private-tw8pu4dp6amahwrxrkm22fim';
$client = new Client([
'host' => 'http://localhost:3002',
'app-search' => [
'token' => $private_key
]
]);
$app = $client->appSearch();
// $app->createEngine(new Request\\CreateEngine('postgres'));
$dbconn = pg_connect("host=localhost, dbname=testdb user=liuxg password=123");
$result = pg_query('SELECT * FROM company');
$slice = array();
while($line = pg_fetch_object($result)) {
array_push($slice, $line);
if(count($slice) > 1) {
$app->indexDocuments(new Request\\IndexDocuments('postgres', $slice));
$slice = array();
}
}
?>
请注意:在上面,你需要根据自己的 private_key 做相应的改动。我们也需要根据自己的 engine 不同而进行相应的修改。针对大量数据来说,我们可以修改上面的如下句子:
if(count($slice) > 1000) {
$app->indexDocuments(new Request\\IndexDocuments('postgres', $slice));
$slice = array();
}
在上面,我们在大于 1000 个文档时才写入,这样才发生一个请求。这个需要根据实际的情况自行设计。
我们可以通过如下的命令来运行:
php ingest.php
这样我们在 Postgres 数据库中的文档就被成功地导入到 App Search 的引擎中了。我们可以通过如下的方式来进行查看:
好了到目前为止,我们成功地把 Postgres 里的数据导入到 App Search 中。在实际的使用中,我们的 Postgres 数据库可能需要添加或者修改数据,那么在这种情况下,我们建议在添加或删除 Postgres 数据库的同时也通过 API 的方法来对相应的数据进行更新或者删除。这个就留给你们做了。
参考:
以上是关于Enterprise:如何使用 PHP 客户端将数据提取到 App Search 中的主要内容,如果未能解决你的问题,请参考以下文章
Enterprise:如何使用 Python 客户端将数据提取到 App Search 中
Enterprise:如何使用 Python 客户端将数据提取到 App Search 中