Elasticsearch-PHP库使用报错:No alive nodes found in your cluster[64] in ../Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Hyperf Elasticsearch-PHP库使用报错:No alive nodes found in your cluster[64] in ../Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php

前言

环境

项目

版本

PHP v8.0

Hyperf

v3.0
Elasticsearch v8.0
elasticsearch-php v7.17.1


服务地址

使用nginx将 服务器本地9200端口的elasticsearch服务映射到es.test.cn/es/

006.png

起因

代码

在hyperf中使用elasticsearch-php库连接elasticsearch服务,代码如下:

    #[GetMapping(path: "ela")]
    public function ela () {
        $host = "http://es.test.cn/es/";
        $builder = $this->container->get(ClientBuilderFactory::class)->create();
        $client = $builder
            ->setHosts([$host])
            ->setBasicAuthentication("username", "pwd")
            ->build();
        $info = $client->info();
        return $info;
    }

接口返回

002.png

服务端报错信息

[ERROR] No alive nodes found in your cluster[64] in /data/project/vendor/elasticsearch/elasticsearch/src/Elasticsearch/ConnectionPool/StaticNoPingConnectionPool.php

000.png

分析

官方文档

按照elasticsearch官方的文档,host可以使用以下类型

  • IP + 端口
  • 仅IP
  • 域名 + 端口
  • 仅域名
  • Https 本地地址
  • Https IP + 端口

001.png

库源码

查看elasticsearch-php库源码,发现在解析host时,如果没有端口会默认加上9200端口,位置如下:

vendor\elasticsearch\elasticsearch\src\Elasticsearch\ClientBuilder.php

005.png

解决

代码

所以这个问题的解决就是在域名后加上相应nginx映射端口,我是默认80端口:es.test.cn:80,代码如下:

#[GetMapping(path: "ela")]
    public function ela () {
        $host = "http://es.test.cn:80/es/";
        $builder = $this->container->get(ClientBuilderFactory::class)->create();
        $client = $builder
            ->setHosts([$host])
            ->setBasicAuthentication("username", "pwd")
            ->build();
        $info = $client->info();
        return $info;
    }


接口返回

如下图,正确返回服务信息:

003.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
存储 监控 负载均衡
检索服务elasticsearch集群(Cluster)
【8月更文挑战第23天】
71 3
|
1月前
|
监控 API 索引
Elasticsearch集群使用 _cluster/health API
Elasticsearch集群使用 _cluster/health API
53 2
|
2月前
|
应用服务中间件 Shell PHP
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
pbootcms模板报错提示PHP Warning: Unknown: open_basedir restriction
|
3月前
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
58 6
|
4月前
|
PHP
PHP——oneinstack重新安装PHP的时候报错
PHP——oneinstack重新安装PHP的时候报错
74 4
|
4月前
|
PHP
PHP——安装ThinkPHP框架报错
PHP——安装ThinkPHP框架报错
44 0
|
6月前
|
PHP 数据库
phpMyAdmin报错 in ./libraries/config/FormDisplay.php#661 continue targeting switch is equivalent to
phpMyAdmin报错 in ./libraries/config/FormDisplay.php#661 continue targeting switch is equivalent to
48 0
|
27天前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
37 0
|
18天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####