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,以完全控制客户端配置
相关推荐
说私域18 分钟前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
MM_MS30 分钟前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
焦耳热科技前沿1 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程
向量引擎小橙1 小时前
推理革命与能耗:AI大模型应用落地的“冰山成本”与破局之路
大数据·人工智能·深度学习·集成学习
一条咸鱼_SaltyFish2 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
TMT星球3 小时前
星动纪元携人形机器人家族亮相CES 2026,海外业务占比达50%
大数据·人工智能·机器人
chen<>3 小时前
Git原理与应用
大数据·git·elasticsearch·svn
焦耳热科技前沿3 小时前
西华大学Adv. Sci.:超高温焦耳热冲击制备拓扑缺陷碳,用于催化碳纳米管可控生长
大数据·人工智能·能源·材料工程·电池
故乡de云4 小时前
Google Cloud与AWS大数据AI服务对比:2026年企业选型指南
大数据·人工智能·aws
米粒14 小时前
操作系统原理--处理机调度
大数据