Elasticsearch BM25 检索器连接问题解决方案

Elasticsearch BM25 检索器连接问题解决方案

1 问题分析

在 SafeRAG 项目中使用 BM25 检索器时遇到 Elasticsearch 连接问题。根本原因包括:

  1. 协议不匹配: 原代码使用 HTTP 连接,但 Elasticsearch 9.2.0 默认启用了 HTTPS
  2. 缺少身份验证: Elasticsearch 启用了安全特性,需要用户名和密码认证
  3. 客户端类型错误 : llama_indexElasticsearchStore 需要异步客户端,但原代码使用同步客户端

2 问题排查步骤

1. 检查 Elasticsearch 服务状态

复制代码
sudo systemctl status elasticsearch

确认服务正在运行

2. 检查端口监听

复制代码
sudo lsof -i :9200

确认 Elasticsearch 在 9200 端口监听

3. 测试连接

复制代码
# 测试 HTTP 连接(会失败)  
curl http://localhost:9200  
  
# 测试 HTTPS 连接(需要认证)  
curl -k https://localhost:9200  
  
# 使用认证测试  
curl -k -u elastic:PASSWORD https://localhost:9200

4. 重置 Elasticsearch 密码

复制代码
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

记录生成的新密码

5. 查看错误日志

复制代码
sudo tail -n 100 /var/log/elasticsearch/elasticsearch.log

关键错误信息:

  • received plaintext http traffic on an https channel - 协议不匹配
  • TypeError: object HeadApiResponse can't be used in 'await' expression - 客户端类型错误

3 解决方案1 (最简单)

完全禁用 Elasticsearch 安全功能

编辑 elasticsearch.yml 配置文件:

bash 复制代码
 sudo vim /etc/elasticsearch/elasticsearch.yml

完全禁用安全功能 ,将3个地方设置为false

txt 复制代码
xpack.security.enabled: false  
xpack.security.http.ssl.enabled: false  
xpack.security.transport.ssl.enabled: false

重启服务

bash 复制代码
sudo systemctl restart elasticsearch

4 解决方案2

(1)修改 retrievers/bm25.py 文件

修改客户端初始化 (第50行)

修改前:

复制代码
self.es_client = Elasticsearch([{'host': 'localhost', 'port': 9200, "scheme": "http"}])

修改后:

复制代码
from elasticsearch import AsyncElasticsearch  
  
self.es_client = AsyncElasticsearch(  
    ["https://localhost:9200"],  
    basic_auth=("elastic", "YOUR_PASSWORD"),  # 使用重置后的密码  
    verify_certs=False,  
    ssl_show_warn=False  
)

修改 construct_index 方法 (约第79行)

修改前:

复制代码
vector_store = ElasticsearchStore(  
    index_name=self.collection_name,  
    es_url="http://localhost:9200"  
)

修改后:

复制代码
vector_store = ElasticsearchStore(  
    index_name=self.collection_name,  
    es_client=self.es_client  # 传入配置好的客户端  
)
  1. 修改 construct_attack_index 方法 (约第118行)

同样将 es_url 参数改为 es_client 参数


总结:

  1. 使用 AsyncElasticsearch : llama_indexElasticsearchStore 内部使用异步操作,必须传入异步客户端
  2. HTTPS 协议 : Elasticsearch 9.2.0 默认启用 SSL/TLS,需使用 https:// 协议
  3. 禁用证书验证 : 开发环境中使用 verify_certs=False 跳过自签名证书验证
  4. 传入客户端对象 : 使用 es_client 参数而非 es_url,以完全控制客户端配置
相关推荐
yurenshi166811 分钟前
自媒体多账号管理工具 4 款实测:聚媒通 / 融媒宝 / 新榜小豆芽 / 矩阵通横向对比,快速选型
大数据·矩阵·媒体
nVisual1 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
@insist1231 小时前
系统规划与管理师-流程评价与持续改进核心知识-终章
大数据·人工智能·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
TechEdu2026063 小时前
[计算机科学]大数据硬件架构与软件架构概览
大数据·计算机科学
爱莉希雅&&&3 小时前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
FII工业富联科技服务3 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输3 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
Spey_Events3 小时前
【核心议题发布】聚焦深度维修与 AI 智慧革新!2026中国民用航空维修智造展——议题重磅发布!
大数据·人工智能
czzxxxxxx3 小时前
创客匠人AI智能体:知识付费从“重人力”走向“自动化”的拐点
大数据·人工智能
大大大大晴天3 小时前
Hudi技术内幕:Clustering原理与实践
大数据