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

简介: 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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
索引
ElasticSearch 报错及解决 详细 0405【已解决】
ElasticSearch 报错及解决 详细 0405【已解决】
1358 4
|
10月前
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
333 9
|
存储 监控 负载均衡
检索服务elasticsearch集群(Cluster)
【8月更文挑战第23天】
355 3
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
监控 API 索引
Elasticsearch集群使用 _cluster/health API
Elasticsearch集群使用 _cluster/health API
879 2
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
612 7
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
Java
ElasticSearch启动报错 java version is an early-access build ,only use release builds【已解决】
ElasticSearch启动报错 java version is an early-access build ,only use release builds【已解决】
394 0
|
PHP
连接数库失败could not find driver Fatal error: Call to a member function prepare() on a non-object in D:\AppServ\www\xsphp_code\brophp\bases\dpdo.class.php
解决方法: 编辑使用的 php.ini, 找到下面扩展并去掉注释打开扩展即可extension=php_pdo.dllextension=php_pdo_mysql.dllextension=php_pdo_pgsql.
1283 0
|
11月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
541 0
PHP和Mysql前后端交互效果实现

热门文章

最新文章