@@ -317,3 +317,83 @@ def test_vector_search_different_query_vectors(vector_env):
317317 .search (table )
318318 )
319319 assert results3 .to_pydict ()["name" ][0 ] == "Doc4"
320+
321+
322+ def test_cypher_engine_execute_with_vector_rerank (vector_env ):
323+ """Test CypherEngine.execute_with_vector_rerank basic functionality."""
324+ from lance_graph import CypherEngine
325+
326+ config , datasets , _ = vector_env
327+ engine = CypherEngine (config , datasets )
328+
329+ results = engine .execute_with_vector_rerank (
330+ "MATCH (d:Document) WHERE d.category = 'tech' RETURN d.id, d.name, d.embedding" ,
331+ VectorSearch ("d.embedding" )
332+ .query_vector ([1.0 , 0.0 , 0.0 ])
333+ .metric (DistanceMetric .L2 )
334+ .top_k (2 ),
335+ )
336+
337+ data = results .to_pydict ()
338+ assert len (data ["d.name" ]) == 2
339+ assert data ["d.name" ][0 ] == "Doc1"
340+
341+
342+ def test_cypher_engine_vs_cypher_query_vector_rerank_equivalence (vector_env ):
343+ """Test that CypherEngine produces same results as CypherQuery for vector rerank."""
344+ from lance_graph import CypherEngine
345+
346+ config , datasets , _ = vector_env
347+
348+ query_text = "MATCH (d:Document) WHERE d.category = 'tech' RETURN d.id, d.name, d.embedding"
349+ vector_search = (
350+ VectorSearch ("d.embedding" )
351+ .query_vector ([1.0 , 0.0 , 0.0 ])
352+ .metric (DistanceMetric .L2 )
353+ .top_k (2 )
354+ )
355+
356+ # Execute with CypherQuery
357+ query = CypherQuery (query_text ).with_config (config )
358+ result_query = query .execute_with_vector_rerank (datasets , vector_search )
359+
360+ # Execute with CypherEngine
361+ engine = CypherEngine (config , datasets )
362+ result_engine = engine .execute_with_vector_rerank (query_text , vector_search )
363+
364+ # Results should be identical
365+ assert result_query .to_pydict () == result_engine .to_pydict ()
366+
367+
368+ def test_cypher_engine_vector_rerank_multiple_queries (vector_env ):
369+ """Test that CypherEngine efficiently handles multiple vector rerank queries."""
370+ from lance_graph import CypherEngine
371+
372+ config , datasets , _ = vector_env
373+ engine = CypherEngine (config , datasets )
374+
375+ # Execute multiple different queries using the same cached engine
376+ results1 = engine .execute_with_vector_rerank (
377+ "MATCH (d:Document) RETURN d.id, d.name, d.embedding" ,
378+ VectorSearch ("d.embedding" )
379+ .query_vector ([1.0 , 0.0 , 0.0 ])
380+ .metric (DistanceMetric .L2 )
381+ .top_k (2 ),
382+ )
383+
384+ results2 = engine .execute_with_vector_rerank (
385+ "MATCH (d:Document) WHERE d.category = 'science' RETURN d.id, d.name, d.embedding" ,
386+ VectorSearch ("d.embedding" )
387+ .query_vector ([0.0 , 1.0 , 0.0 ])
388+ .metric (DistanceMetric .Cosine )
389+ .top_k (1 ),
390+ )
391+
392+ data1 = results1 .to_pydict ()
393+ data2 = results2 .to_pydict ()
394+
395+ assert len (data1 ["d.name" ]) == 2
396+ assert data1 ["d.name" ][0 ] == "Doc1"
397+
398+ assert len (data2 ["d.name" ]) == 1
399+ assert data2 ["d.name" ][0 ] == "Doc3"
0 commit comments