From f02f5fa435a822c324a72a4c12529df5d1df5192 Mon Sep 17 00:00:00 2001 From: qinling0210 <88864212+qinling0210@users.noreply.github.com> Date: Thu, 2 Apr 2026 18:56:43 +0800 Subject: [PATCH] Get ROW_ID from search() in Infinity (#13901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### What problem does this PR solve? 1. Search() in Infinity can return row_id now 2. To Get ROW_ID from search(), refer to handling of retrieval_test. example ``` $ curl -s -X POST "http://localhost:$PORT/v1/chunk/retrieval_test" -H "Authorization: $TOKEN" -H "Content-Type: application/json" -d '{"kb_id": "4fcd01582ca911f1954184ba59049aa3", "question": "曹操"}' ``` ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- rag/nlp/search.py | 3 ++- rag/utils/infinity_conn.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/rag/nlp/search.py b/rag/nlp/search.py index d45c87d4f9..bca8fb85ba 100644 --- a/rag/nlp/search.py +++ b/rag/nlp/search.py @@ -92,7 +92,7 @@ class Dealer: ["docnm_kwd", "content_ltks", "kb_id", "img_id", "title_tks", "important_kwd", "position_int", "doc_id", "page_num_int", "top_int", "create_timestamp_flt", "knowledge_graph_kwd", "question_kwd", "question_tks", "doc_type_kwd", - "available_int", "content_with_weight", "mom_id", PAGERANK_FLD, TAG_FLD]) + "available_int", "content_with_weight", "mom_id", PAGERANK_FLD, TAG_FLD, "row_id()"]) kwds = set([]) qst = req.get("question", "") @@ -486,6 +486,7 @@ class Dealer: "positions": position_int, "doc_type_kwd": chunk.get("doc_type_kwd", ""), "mom_id": chunk.get("mom_id", ""), + "row_id": chunk.get("row_id()"), } if highlight and sres.highlight: if id in sres.highlight: diff --git a/rag/utils/infinity_conn.py b/rag/utils/infinity_conn.py index 4a29404c2a..b95ab88bd8 100644 --- a/rag/utils/infinity_conn.py +++ b/rag/utils/infinity_conn.py @@ -639,6 +639,9 @@ class InfinityConnection(InfinityConnectionBase): res[field] = res["authors"] column_map = {col.lower(): col for col in res.columns} + # row_id() is returned by infinity as "row_id", add mapping for lookup + if "row_id()" in fields_all and "row_id" in column_map: + column_map["row_id()"] = column_map["row_id"] matched_columns = {column_map[col.lower()]: col for col in fields_all if col.lower() in column_map} none_columns = [col for col in fields_all if col.lower() not in column_map]