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.pswp.cn/diannao/81304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81304.shtml
英文地址,請注明出處:http://en.pswp.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} #注…