当前位置: 首页 > java >正文

RAGFlow报错:ESConnection.sql got exception

环境:

Ragflowv0.17.2

问题描述:

RAGFlow报错:ESConnection.sql got exception

_ming_cheng_tks, '浙江', 'operator=OR;minimum_should_match=30%') 
2025-04-25 15:55:06,862 INFO     244867 POST http://localhost:1200/_sql?format=json [status:400 duration:0.002s]
2025-04-25 15:55:06,862 ERROR    244867 ESConnection.sql got exception
Traceback (most recent call last):File "/home/www/ragflow/ragflow/rag/utils/es_conn.py", line 553, in sqlres = self.es.sql.query(body={"query": sql, "fetch_size": fetch_size}, format=format,File "/home/www/ragflow/ragflow/.venv/lib/python3.10/site-packages/elasticsearch/_sync/client/utils.py", line 446, in wrappedreturn api(*args, **kwargs)File "/home/www/ragflow/ragflow/.venv/lib/python3.10/site-packages/elasticsearch/_sync/client/sql.py", line 330, in queryreturn self.perform_request(  # type: ignore[return-value]File "/home/www/ragflow/ragflow/.venv/lib/python3.10/site-packages/elasticsearch/_sync/client/_base.py", line 389, in perform_requestreturn self._client.perform_request(File "/home/www/ragflow/ragflow/.venv/lib/python3.10/site-packages/elasticsearch/_sync/client/_base.py", line 320, in perform_requestraise HTTP_EXCEPTIONS.get(meta.status, ApiError)(

解决方案:

1.主要修改点说明:

  1. 正则表达式增强
pattern = r"([a-z_]+_l?tks)\s+(like|=)\s*'([^']+)'"
  • 支持大小写混合的字段名
  • 允许等号(=)和LIKE操作符
  • 更严格捕获值部分
  1. 分词处理优化
tokenized = rag_tokenizer.fine_grained_tokenize(rag_tokenizer.tokenize(val))
  • 确保中文值被正确分词
  • 处理特殊字符转义
  1. 参数标准化
'operator=OR, minimum_should_match=30%'
  • 使用逗号替代分号作为参数分隔符
  • 符合Elasticsearch SQL参数规范
  1. 保留大小写
re.sub(re.escape(old), new, sql, flags=re.IGNORECASE)
  • 保持原始SQL的大小写格式
  • 避免意外修改其他部分
  1. 超时时间优化
params={"request_timeout": 30}
  • 从2秒延长到30秒
  • 适应复杂查询场景
  1. 错误日志增强
logger.error(f"ES SQL Error: {str(e)} \nQuery: {sql}")
  • 记录完整错误信息
  • 保留问题查询语句

典型转换示例:

原始查询:

SELECT * WHERE _ming_cheng_tks LIKE '浙江'

转换后:

SELECT * WHERE MATCH(_ming_cheng_tks, '浙 江', 'operator=OR, minimum_should_match=30%')

验证方法:

# 测试用例
test_sql = "SELECT _id FROM index WHERE name_tks = '杭州' OR addr_ltks LIKE '西湖区'"
expected = "SELECT _id FROM index WHERE MATCH(name_tks, '杭 州', 'operator=OR, minimum_should_match=30%') OR MATCH(addr_ltks, '西 湖 区', 'operator=OR, minimum_should_match=30%')"

2.修改源码es_conn.py文件路径和详情

大概531行

ragflow-main\rag\utils\es_conn.py

    def sql(self, sql: str, fetch_size: int, format: str):logger.debug(f"ESConnection.sql get sql: {sql}")sql = re.sub(r"[ `]+", " ", sql)sql = sql.replace("%", "")replaces = []# 修改点1:增强正则匹配模式pattern = r"([a-z_]+_l?tks)\s+(like|=)\s*'([^']+)'"for r in re.finditer(pattern, sql, re.IGNORECASE):fld, op, val = r.group(1), r.group(2), r.group(3)# 修改点2:正确处理分词和特殊字符tokenized = rag_tokenizer.fine_grained_tokenize(rag_tokenizer.tokenize(val))# 修改点3:参数格式标准化match_expr = f"MATCH({fld}, '{tokenized}', 'operator=OR, minimum_should_match=30%')" replaces.append((f"{fld} {op} '{val}'", match_expr))# 修改点4:保留原始大小写格式for old, new in replaces:sql = re.sub(re.escape(old), new, sql, flags=re.IGNORECASE)logger.debug(f"ESConnection.sql transformed: {sql}")# 修改点5:增加超时时间for i in range(ATTEMPT_TIME):try:res = self.es.sql.query(body={"query": sql, "fetch_size": fetch_size},format=format,params={"request_timeout": 30}  # 从2秒增加到30秒)return resexcept ConnectionTimeout:logger.exception(f"ESConnection.sql timeout on: {sql}")continueexcept Exception as e:# 修改点6:记录完整错误信息logger.error(f"ES SQL Error: {str(e)} \nQuery: {sql}")return None

在这里插入图片描述
3.重启服务后验证正常
在这里插入图片描述

http://www.xdnf.cn/news/3379.html

相关文章:

  • 【基础算法】插值查找算法 - JAVA
  • (即插即用模块-Attention部分) 六十一、(2024 ACCV) LIA 基于局部重要性的注意力
  • 【数据分享】2020年中国高精度森林覆盖数据集(免费获取)
  • VBA数据库解决方案第二十讲:Select From Where条件表达式
  • 「面白い」日本 课文详解
  • 【MySQL数据库】视图
  • Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode
  • ARM ASM
  • 【云原生】基于Centos7 搭建Redis 6.2 操作实战详解
  • 【五一培训】Day1
  • Redis 挂掉后高并发系统的应对策略:使用 Sentinel 实现限流降级与 SkyWalking 监控优化
  • PostgreSQL 数据库下载和安装
  • Stm32 烧录 Micropython
  • 基于机器学习的舆情分析算法研究
  • 连接linux虚拟机并运行C++【从0开始】
  • 机器学习实战,天猫双十一销量与中国人寿保费预测,使用多项式回归,梯度下降,EDA数据探索,弹性网络等技术
  • vue中$set原理
  • Meta公司于2025年4月29日正式推出了全新Meta AI应用程序的首个版本
  • 正则表达式:精准匹配,高效处理文本
  • 《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型
  • 结构模式识别理论与方法
  • JWT Access Token 被窃取的风险与解决方案
  • spring-boot-maven-plugin 将spring打包成单个jar的工作原理
  • 企业经营系统分类及功能详解
  • 华为eNSP:IS-IS认证
  • 机器人--主机--控制系统
  • Python 常用内置函数详解(九):type()函数——获取对象类型或获取一个新的类型对象
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(上)
  • 2025华东杯数学建模B题完整分析论文(共36页)(含模型、代码、数据)
  • 分享5款开源、美观的 WinForm UI 控件库