Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/neo4j_graphrag/retrievers/vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ def __init__(
)
self.result_formatter = validated_data.result_formatter
self._node_label = None
self._node_embedding_property = None
self._embedding_node_property = None

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch!

self._embedding_dimension = None
self._filterable_properties: list[str] = []
self._fetch_index_infos(self.index_name)
Expand Down Expand Up @@ -503,7 +503,7 @@ def get_search_results(
search_type=SearchType.VECTOR,
retrieval_query=self.retrieval_query,
node_label=self._node_label,
embedding_node_property=self._node_embedding_property,
embedding_node_property=self._embedding_node_property,
embedding_dimension=self._embedding_dimension,
filters=filters,
)
Expand Down Expand Up @@ -534,7 +534,7 @@ def get_search_results(
search_type=SearchType.VECTOR,
retrieval_query=self.retrieval_query,
node_label=self._node_label,
embedding_node_property=self._node_embedding_property,
embedding_node_property=self._embedding_node_property,
embedding_dimension=self._embedding_dimension,
filters=filters,
)
Expand Down
54 changes: 54 additions & 0 deletions tests/unit/retrievers/test_vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,60 @@ def test_search_clause_with_return_properties(
class TestVectorCypherRetrieverSearchClausePath:
"""Tests for VectorCypherRetriever routing to SEARCH clause."""

@patch(
"neo4j_graphrag.retrievers.vector.supports_search_clause", return_value=False
)
@patch("neo4j_graphrag.retrievers.VectorCypherRetriever._fetch_index_infos")
@patch("neo4j_graphrag.retrievers.base.get_version")
def test_filtered_fallback_uses_fetched_embedding_property(
self,
mock_get_version: MagicMock,
_fetch_index_infos: MagicMock,
_mock_supports_search: MagicMock,
driver: MagicMock,
) -> None:
mock_get_version.return_value = ((5, 23, 0), False, False)
retrieval_query = "RETURN node.id AS node_id, score"
retriever = VectorCypherRetriever(
driver=driver,
index_name="my-index",
retrieval_query=retrieval_query,
)
retriever._node_label = "Document"
retriever._embedding_node_property = "embedding"
retriever._embedding_dimension = 3

query_vector = [1.0, 2.0, 3.0]
driver.execute_query.return_value = [[], None, None]

retriever.search(
query_vector=query_vector,
top_k=5,
filters={"organization": {"$eq": "neo4j"}},
)

expected_query, search_params = get_search_query(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand what this test is doing. It's never testing that the property was properly populated (_fetch_index_info is moched) and it's also never testing the actual query being generated?

SearchType.VECTOR,
retrieval_query=retrieval_query,
node_label="Document",
embedding_node_property="embedding",
embedding_dimension=3,
filters={"organization": {"$eq": "neo4j"}},
)
expected_params = {
"vector_index_name": "my-index",
"top_k": 5,
"effective_search_ratio": 1,
"query_vector": query_vector,
}
expected_params.update(search_params)
driver.execute_query.assert_called_once_with(
expected_query,
expected_params,
database_=None,
routing_=neo4j.RoutingControl.READ,
)

@patch("neo4j_graphrag.retrievers.vector.supports_search_clause", return_value=True)
@patch("neo4j_graphrag.retrievers.VectorCypherRetriever._fetch_index_infos")
@patch("neo4j_graphrag.retrievers.base.get_version")
Expand Down
Loading