当前位置: 首页 > 网络应用技术

Elasticsearch:介绍Elasticsearch 8.x的新PHP客户端

时间:2023-03-06 13:53:30 网络应用技术

  作者:Enrico Zimuel

  Elasticsearch 8的新PHP客户端已从Scratch重写。除了使用PSR标准,我们还重新设计了体系结构,并将HTTP传输层移至外部。DUE到HTTPLUG库,您还可以使用可插入的系统。

  继续阅读以探索:

  Elasticsearch -PHP库是使用PHP编程Elasticsearch的官方客户端。该库使用主要客户端类打开Elasticsearch的所有400个端点。在该库的第七版中,所有端点都使用要披露的函数,例如,索引API映射到客户端:: index()。

  这些函数返回一个关联的数组,这是来自elasticsearch.的http响应的后序列化。基因,此响应由json messages表示。usephp的json_decode()函数将此消息转换为数组。

  如果有错误,客户端将根据问题抛出异常。例如,如果HTTP响应为404,则客户端将丢弃404 exception。如果您想检索HTTP响应本身,则需要使用以下代码为了获得客户的最后回复:

  HTTP请求和响应通过以下方法从传输层(客户端属性)中检索:getlastConnection()和getlastrequestinfo()。

  该代码无法提供良好的开发体验,因为关联的数组$响应中有许多键,以及使用PHP的卷曲扩展。

  我们有很多理由构建新的Elasticsearch-PHP 8:开发人员体验,新的PHP标准以及更多开放的体系结构和性能。

  它安装了大约7000万次,我们不希望版本8具有许多BC中断。我们使用向后兼容的方法提供与版本相同的API。这意味着您通常可以使用相同的代码来连接到ElasticsEarch并执行端点调用。差异是响应。在版本8中,响应是弹性搜索响应的对象,以及PSR-7响应接口和PHP的arrayAccess接口。

  等一下 - 这不是BC的中断吗?幸运的是,我们实现了ArrayAccess接口,您可以继续以数组的形式消耗响应,如下所示:

  发现差异:命名空间已更改!我们引入了弹性根名称空间。其他代码看起来相同,但是引擎盖下有很多更改。

  正如我们提到的那样,版本8中的$响应是一个对象,版本7是关联的数组。如果您想要与版本7完全相同的行为,则可以使用函数$ response-> asarray()来序列化。响应阵列。

  我们还提供asobject(),asstring()和asbool()函数,将主体序列化为PHP标准类(STDCLASS)对象,为字符串或布尔值(如果2xx响应为真,则为false)。

  例如,您可以使用上一个info()端点,如下所示:

  $响应可以作为实现PHP的_get()魔法方法的对象访问响应主体。

  如果要读取HTTP响应,则无需从客户端对象还原最后一条消息。您可以在$响应本身中访问PSR-7消息,如下所示:

  这是一个很大的优势,尤其是当您使用异步时。实际上,如果您使用异步编程,则不能从客户端检索最终响应。不能保证最后一个响应是您想要找到的响应(将引入异步操作,稍后详细)

  我们将自动完成函数使用到psalm project的Elasticsearch-PHP版本。PSALM是一种静态分析工具,允许开发人员使用特殊的PHPDOC属性来修改代码。属性的一种是@psalm-type,可以指定该属性。关联阵列的关键类型。我们使用标准phpdoc @param应用诗篇类型。EADPHP客户端端点具有输入参数,$ params array。例如,index()端点部分在此处报告:

  所有参数均在名称(索引)中指定,包括类型(字符串)和描述参数的注释(索引的名称)。使用所需的注释指定所需的参数。

  您可以使用先前的表示形式在IDE中自动完成。

  Elasticsearch php客户端8.x深度纯度

  Elasticsearch php客户端8.x深入完成

  即使此版本仍在开发中,[Elastic-Transport-PHP](https://marketplace.visualstudio.com/items?Items> Visual Studio Code也可以使用Deep-Assoc-conspting。

  我们在版本8中做出的另一个更改是将HTTP传输层与库分开。我们创建了

  Elasticsearch-PHP版本8使用Elastic-Transport-PHP作为依赖项。这意味着您可以使用自定义HTTP库,自定义节点池或自定义录音机连接到Elasticsearch。

  我们使用HTTPLUG库来执行PHP应用程序中可用的PSR-18和PSR-7库的自动发现。默认情况下,如果未安装应用程序在HTTP库中,我们使用Guzzle。

  例如,您可以使用Symfony HTTP客户端,如下所示:

  或者,您可以使用Monology记录库,如下所示:

  有关如何自定义客户端的更多信息,请检查配置页面。

  弹性云是弹性提供的PAAS解决方案。要连接到弹性云,您只需要云ID和API键即可。

  您可以在我的Elastic Cloud仪表板的部署页面中检索云ID。可以从安全页面设置的管理部分生成API键。

  您可以阅读PHP客户端文档的连接部分以获取更多信息。

  收集云ID和API键后,您可以使用Elasticsearch-PHP连接到弹性云实例,如下所示:

  如果您在基础架构中安装Elasticsearch 8,则可以使用启用TLS的PHP客户端(传输层安全性).elasticsearch 8默认安全性,这意味着它使用TLS来保护客户端和服务器之间的通信。

  要配置Elasticsearch-PHP以连接到Elasticsearch 8,您需要拥有一个证书授权文件(CA)。

  您可以以不同的方式安装Elasticsearch。如果使用Docker,则需要执行以下命令:

  安装Docker映像后,您可以使用单个节点群集配置Elasticsearch,如下所示:

  该命令创建一个弹性Docker网络,并使用端口9200(默认)来启动Elasticsearch。

  运行Docker映像时,您将为弹性用户生成一个密码,并将其打印到终端(您可能需要在终端中稍微回滚以查看它)。您必须将其复制到Elasticsearch。

  Elasticsearch现在正在运行,我们可以获得HTTP_CA.CRT文件证书。使用以下命令从Docker实例复制它:

  在Elasticsearch启动期间复制了HTTP_CA.CRT证书和密码后,我们可以使用它来连接以下内容:

  PHP客户端提供了对每个端点执行异步调用的可能性。

  上一个示例使用异步HTTP调用elasticsearch中的索引{“ foo”:“ bar”}文档。$ wenspys是未来,而不是实际响应。

  未来代表了未来的计算和作为占位符。这些值可以立即可用。如果未来尚未解析,则该分析将阻止直到这些值可用(例如,在完成API调用后)。

  在版本7中,未来实际上是undphp项目的承诺。在版本8中,如果要使用异步,则需要为您的HTTP客户端安装特定的适配器。例如,如果您使用Guzlezle 7(默认的HTTP库)在Elasticsearch-php)中,您需要安装PHP-HTTP/Guzzle7-Adapter,如下所示:

  要使用异步调用执行端点,您需要使用客户端:: setSync(true)函数启用它,如下所示:

  如果要禁用下一个端点的异步,则需要将SetAsync设置为False。

  异步调用的响应是httplug库的承诺对象。此承诺遵循承诺/a+ standard.promise代表异步操作的最终结果。

  要获得响应,您需要等待响应到达。这将阻止响应的执行,如下所示:

  与Promise互动的主要方法是通过其当时的方法。此方法已注册以回电以接收承诺的最终价值或无法实现承诺。

  在上面的示例中,需要最后一个$ witch-> wait()来求解执行调用。

  新的Elasticsearch PHP客户端的代码少于版本7。特别是,Elasticsearch-PHP版本8由1,025行组成1,025行的1,025行,分别为6,522行代码 + Elastic-Transport-PHP,总共7,547行。20,715行,因此新版本8的大小约为上一个的三分之一。

  在内存使用方面,Elasticsearch-PHP版本8实现了延迟加载机制以优化API命名空间加载。这意味着,如果您仅使用一个超过400个端点的一个子集,则不会在存储器中加载所有规格。

  Elasticsearch 8带来了一些令人兴奋的改进。从新体系结构和维护版本7的落后性的能力到默认的安全设置以及异步模型的优势,这种可能性从来没有像现在这样无休止。

  最好的输入方法是使用弹性云。立即免费启动弹性云!

  原始:将新的PHP客户端插入Elasticsearch 8 |弹性博客

  原始:https://juejin.cn/post/7098244155620950023