From 0336f9cf0071ec8f78d78de01a88702b52653440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=A4=A7=E6=B4=8B?= <714403855@qq.com> Date: Wed, 28 Jan 2026 17:54:53 +0800 Subject: [PATCH 1/4] feat: fix get_nodes --- src/memos/graph_dbs/polardb.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index 40c0c9684..fc8f5f193 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -1130,6 +1130,7 @@ def get_nodes( - Assumes all provided IDs are valid and exist. - Returns empty list if input is empty. """ + logger.info(f"get_nodes ids:{ids},user_name:{user_name}") if not ids: return [] @@ -1151,9 +1152,12 @@ def get_nodes( WHERE ({where_clause}) """ - user_name = user_name if user_name else self.config.user_name - query += " AND ag_catalog.agtype_access_operator(properties, '\"user_name\"'::agtype) = %s::agtype" - params.append(self.format_param_value(user_name)) + # Only add user_name filter if provided + if user_name is not None: + query += " AND ag_catalog.agtype_access_operator(properties, '\"user_name\"'::agtype) = %s::agtype" + params.append(self.format_param_value(user_name)) + + logger.info(f"get_nodes query:{query},params:{params}") conn = None try: @@ -2033,6 +2037,7 @@ def search_by_embedding( knowledgebase_ids: list[str] | None = None, **kwargs, ) -> list[dict]: + print("1111user_name:",user_name) """ Retrieve node IDs based on vector similarity using PostgreSQL vector operations. """ @@ -2070,6 +2075,7 @@ def search_by_embedding( knowledgebase_ids=knowledgebase_ids, default_user_name=self.config.user_name, ) + print("2222user_name_conditions:", user_name_conditions) # Add OR condition if we have any user_name conditions if user_name_conditions: @@ -3530,6 +3536,7 @@ def add_nodes_batch( - metadata: dict[str, Any] - Node metadata user_name: Optional user name (will use config default if not provided) """ + print("222nodes:",nodes) batch_start_time = time.time() if not nodes: logger.warning("[add_nodes_batch] Empty nodes list, skipping") @@ -3545,6 +3552,7 @@ def add_nodes_batch( for node_data in nodes: try: id = node_data["id"] + print("777777777id:",id) memory = node_data["memory"] metadata = node_data.get("metadata", {}) @@ -4313,7 +4321,7 @@ def _build_user_name_and_kb_ids_conditions_sql( user_name_conditions = [] effective_user_name = user_name if user_name else default_user_name - if effective_user_name and default_user_name != "xxx": + if effective_user_name: user_name_conditions.append( f"ag_catalog.agtype_access_operator(properties, '\"user_name\"'::agtype) = '\"{effective_user_name}\"'::agtype" ) From 0e865e1371dc47ab52be726a40a96fd62461726c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=A4=A7=E6=B4=8B?= <714403855@qq.com> Date: Wed, 28 Jan 2026 18:03:32 +0800 Subject: [PATCH 2/4] feat: fix get_nodes --- src/memos/graph_dbs/polardb.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index fc8f5f193..b27b5a516 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -2037,7 +2037,6 @@ def search_by_embedding( knowledgebase_ids: list[str] | None = None, **kwargs, ) -> list[dict]: - print("1111user_name:",user_name) """ Retrieve node IDs based on vector similarity using PostgreSQL vector operations. """ @@ -2075,7 +2074,6 @@ def search_by_embedding( knowledgebase_ids=knowledgebase_ids, default_user_name=self.config.user_name, ) - print("2222user_name_conditions:", user_name_conditions) # Add OR condition if we have any user_name conditions if user_name_conditions: @@ -3536,7 +3534,7 @@ def add_nodes_batch( - metadata: dict[str, Any] - Node metadata user_name: Optional user name (will use config default if not provided) """ - print("222nodes:",nodes) + print("222nodes:", nodes) batch_start_time = time.time() if not nodes: logger.warning("[add_nodes_batch] Empty nodes list, skipping") @@ -3552,7 +3550,7 @@ def add_nodes_batch( for node_data in nodes: try: id = node_data["id"] - print("777777777id:",id) + print("777777777id:", id) memory = node_data["memory"] metadata = node_data.get("metadata", {}) From 52868bce306280a5f6a3b1aa7eba01d08201f2a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=A4=A7=E6=B4=8B?= <714403855@qq.com> Date: Wed, 28 Jan 2026 18:04:56 +0800 Subject: [PATCH 3/4] feat: fix get_nodes --- src/memos/graph_dbs/polardb.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index b27b5a516..74d33aaa7 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -3534,7 +3534,6 @@ def add_nodes_batch( - metadata: dict[str, Any] - Node metadata user_name: Optional user name (will use config default if not provided) """ - print("222nodes:", nodes) batch_start_time = time.time() if not nodes: logger.warning("[add_nodes_batch] Empty nodes list, skipping") @@ -3550,7 +3549,6 @@ def add_nodes_batch( for node_data in nodes: try: id = node_data["id"] - print("777777777id:", id) memory = node_data["memory"] metadata = node_data.get("metadata", {}) From 11243d8277542c819bff7df178d455b0a2ac9de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E5=A4=A7=E6=B4=8B?= <714403855@qq.com> Date: Wed, 28 Jan 2026 18:59:25 +0800 Subject: [PATCH 4/4] feat: optimize get_nodes --- src/memos/graph_dbs/polardb.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/memos/graph_dbs/polardb.py b/src/memos/graph_dbs/polardb.py index 74d33aaa7..b9c8ca84b 100644 --- a/src/memos/graph_dbs/polardb.py +++ b/src/memos/graph_dbs/polardb.py @@ -1134,22 +1134,15 @@ def get_nodes( if not ids: return [] - # Build WHERE clause using agtype_access_operator like get_node method - where_conditions = [] - params = [] - - for id_val in ids: - where_conditions.append( - "ag_catalog.agtype_access_operator(properties, '\"id\"'::agtype) = %s::agtype" - ) - params.append(self.format_param_value(id_val)) - - where_clause = " OR ".join(where_conditions) + # Build WHERE clause using IN operator with agtype array + # Use ANY operator with array for better performance + placeholders = ",".join(["%s"] * len(ids)) + params = [self.format_param_value(id_val) for id_val in ids] query = f""" SELECT id, properties, embedding FROM "{self.db_name}_graph"."Memory" - WHERE ({where_clause}) + WHERE ag_catalog.agtype_access_operator(properties, '\"id\"'::agtype) = ANY(ARRAY[{placeholders}]::agtype[]) """ # Only add user_name filter if provided