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.mzph.cn/diannao/81304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标滚动字体缩放

在VsCode中编辑文件时,有时候发现Ctrl鼠标滚轮并不能缩放字体,下面是启用这个功能的方法。 第一步: 进入设置,可以从左下角按钮菜单进入,也可以使用【Ctrl,】。 第二步: 启用鼠标滚轮缩放功能 第三步&…

深度学习·经典模型·VisionTransformer

VIT embedding处理与标准的Transformer不同,其他基本一致 Embedding Graph: ( H , W , C ) (H,W,C) (H,W,C) Patch: ( N , P 2 C ) (N,P^2C) (N,P2C),其中 N H ∗ W P 2 N\frac{H*W}{P^2} NP2H∗W​, P P P是patch的大小 注意的是,论文了保留与Bert的…

Python Selenium 完全指南:从入门到精通

Python Selenium 完全指南:从入门到精通 📚 目录 环境准备与基础入门元素定位与交互操作等待机制与异常处理面向对象封装与框架设计进阶技巧与最佳实践性能优化与调试技巧实战案例分析 环境准备与基础入门 1. 安装 Selenium 与浏览器驱动 安装 Selen…

基于ffmpeg的音视频编码

1 音频编码 本质上是由pcm文件转到一个协议文件 比如说aac协议 1.1 音频基本知识回归 比特率 比特率是指单位时间内传输或处理的比特(bit)数量,通常用 bps(bits per second,比特每秒)来表示。它是衡量数…

BT137-ASEMI机器人功率器件专用BT137

编辑:LL BT137-ASEMI机器人功率器件专用BT137 型号:BT137 品牌:ASEMI 封装:TO-220F 批号:最新 引脚数量:3 封装尺寸:如图 特性:双向可控硅 工作结温:-40℃~150℃…

攻防世界 dice_game

dice_game ​​​​​​dice_game (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file game game: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]254…

Astral Ascent 星界战士(星座上升) [DLC 解锁] [Steam] [Windows SteamOS macOS]

Astral Ascent 星界战士(星座上升) [DLC 解锁] [Steam] [Windows & SteamOS & macOS] 需要有游戏正版基础本体,安装路径不能带有中文,或其它非常规拉丁字符; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章…

git中reset和checkout的用法

git reset:重置分支的历史与工作区​ 核心作用​​:移动当前分支的指针(即改变分支的历史),并可选地修改暂存区(Index)和工作目录(Working Directory)。常用于撤销提交或…

权限提升—Linux提权内核溢出漏洞辅助项目

前言 今天开启Linux提权的篇章,主要是讲一下Linux的内核漏洞提权,利用方式和Windows系统漏洞提权差不多,也是网上的项目扫一下,然后根据漏洞编号去找exp即可。 信息收集 首先要说一下Linux用户的权限划分。 系统用户&#xff…

React Native Redux 使用指南 redux-toolkit

React Native Redux 使用指南 redux-toolkit 一个可预测和可维护的全局状态管理 JavaScript 库 Redux 和 React-Redux以及**reduxjs/toolkit 的关系:** Redux、React-Redux、reduxjs/toolkit 是 React 生态中状态管理的「黄金三角组合」,它们的关系可…

JVM——Java 虚拟机是如何加载 Java 类的?

引入 在 Java 世界的底层运作中,类加载机制扮演着一个既神秘又关键的角色。它就像是一个精心设计的舞台幕后 machinery,确保了 Java 程序能够顺利运行。今天,我们就深入探索 Java 虚拟机(JVM)是如何加载 Java 类的。 …

清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收

时间序列聚类是挖掘物联网等场景下频繁模式的关键技术,但现有SOTA方法(如K-Shape)面临两大瓶颈:1)传统数据库因LSM-Tree存储导致时间戳无序,难以直接支持高效聚类;2)跨时间范围查询需…

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

一、学习目标 特别说明:这一章节是2025年3月官方重点更新的部分,几乎对内容重新翻新改造了一遍,重点突出了对于如何结合不同的阿里云产品来部署大模型进行了更加详细的介绍和对比,这里整理给大家,方便大家参考。 在备考阿里云大模型高级工程师ACP认证的过程中,学习《2.8 …

第T10周:数据增强

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 从 tensorflow.keras 中导入 layers 模块,包含了常用的神经网络层,用来搭建模型结构。 检查并列出系统中可用的物理 GPU 设备&#xff…

uniapp 支付宝小程序自定义 navbar 无效解决方案

如图: uniapp编译到支付宝小程序隐藏默认的导航栏失效了 解决方案: 在 pages.json 文件中找到 globalStyle 中加入以下代码: "mp-alipay": {"transparentTitle": "always","titlePenetrate":…

vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

项目场景&#xff1a; <el-table-column label"税率" prop"TaxRate" width"180" align"center" show-overflow-tooltip><template slot-scope"{row, $index}"><el-form-item :prop"InquiryItemList. …

centos7 离线安装python3 保留python2

一、事前准备&#xff1a; &#xff08;1&#xff09;查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) &#xff08;2&#xff09;查看linux中当前python版本 centos7 默认安装python2.7.5 &#xff08;3&#xff09;查看python3的依赖&#…

十三种通信接口芯片——《器件手册--通信接口芯片》

目录 通信接口芯片 简述 基本功能 常见类型 应用场景 详尽阐述 1 RS485/RS422芯片 1. RS485和RS422标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6. 选型建议 2 RS232芯片 1. RS232标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6…

2025年RAG技术发展现状分析

2025年&#xff0c;大模型RAG&#xff08;检索增强生成&#xff09;技术经历了快速迭代与深度应用&#xff0c;逐渐从技术探索走向行业落地&#xff0c;同时也面临安全性和实用性的新挑战。以下是其发展现状的综合分析&#xff1a; 一、技术架构的持续演进 从单一到模块化架构 …

case和字符串操作

使用if选择结构 if [];then elif [];then #注意这个地方,java是else if else ; fi 使用for循环结构 使用for循环&#xff0c;语法结构如下所示&#xff1a; for 变量名 in 值1 值2 值3 #值的数量决定循环任务的次数 do命令序列 done#循环输出1到10 for i in {1..10} #注…