@@ -218,7 +218,19 @@ def query_node(self, entity_name, hops=2, **kwargs):
218218
219219 def query_by_vector (self , entity_name , threshold = 0.9 , kgdb_name = 'neo4j' , hops = 2 , num_of_res = 5 ):
220220 self .use_database (kgdb_name )
221+ def _index_exists (tx , index_name ):
222+ """检查索引是否存在"""
223+ result = tx .run ("SHOW INDEXES" )
224+ for record in result :
225+ if record ["name" ] == index_name :
226+ return True
227+ return False
228+
221229 def query (tx , text ):
230+ # 首先检查索引是否存在
231+ if not _index_exists (tx , "entityEmbeddings" ):
232+ raise Exception ("向量索引不存在,请先创建索引" )
233+
222234 embedding = self .get_embedding (text )
223235 result = tx .run ("""
224236 CALL db.index.vector.queryNodes('entityEmbeddings', 10, $embedding)
@@ -227,9 +239,14 @@ def query(tx, text):
227239 """ , embedding = embedding )
228240 return result .values ()
229241
230- with self .driver .session () as session :
231- results = session .execute_read (query , entity_name )
232-
242+ try :
243+ with self .driver .session () as session :
244+ results = session .execute_read (query , entity_name )
245+ except Exception as e :
246+ if "向量索引不存在" in str (e ):
247+ logger .error (f"向量索引不存在,请先创建索引: { e } , { traceback .format_exc ()} " )
248+ return []
249+ raise e
233250
234251 # 筛选出分数高于阈值的实体
235252 qualified_entities = [result [0 ] for result in results [:num_of_res ] if result [1 ] > threshold ]
0 commit comments