Skip to content

Commit 7b26b82

Browse files
committed
Reverted embedding_node_property change
1 parent a1778e1 commit 7b26b82

File tree

7 files changed

+28
-45
lines changed

7 files changed

+28
-45
lines changed

src/neo4j_graphrag/neo4j_queries.py

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@
1414
# limitations under the License.
1515
from __future__ import annotations
1616

17-
import warnings
1817
from typing import Any, Optional
1918

2019
from neo4j_graphrag.filters import get_metadata_filter
2120
from neo4j_graphrag.types import IndexType, SearchType
2221

2322
VECTOR_EXACT_QUERY = (
2423
"WITH node, "
25-
"vector.similarity.cosine(node.`{embedding_property}`, $query_vector) AS score "
24+
"vector.similarity.cosine(node.`{embedding_node_property}`, $query_vector) AS score "
2625
"ORDER BY score DESC LIMIT $top_k"
2726
)
2827

2928
BASE_VECTOR_EXACT_QUERY = (
3029
"MATCH (node:`{node_label}`) "
31-
"WHERE node.`{embedding_property}` IS NOT NULL "
32-
"AND size(node.`{embedding_property}`) = toInteger($embedding_dimension)"
30+
"WHERE node.`{embedding_node_property}` IS NOT NULL "
31+
"AND size(node.`{embedding_node_property}`) = toInteger($embedding_dimension)"
3332
)
3433

3534

@@ -93,15 +92,15 @@
9392
"MATCH (n) "
9493
"WHERE elementId(n) = $node_element_id "
9594
"WITH n "
96-
"CALL db.create.setNodeVectorProperty(n, $embedding_property, $vector) "
95+
"CALL db.create.setNodeVectorProperty(n, $embedding_node_property, $vector) "
9796
"RETURN n"
9897
)
9998

10099
UPSERT_VECTOR_ON_RELATIONSHIP_QUERY = (
101100
"MATCH ()-[r]->() "
102101
"WHERE elementId(r) = $rel_element_id "
103102
"WITH r "
104-
"CALL db.create.setRelationshipVectorProperty(r, $embedding_property, $vector) "
103+
"CALL db.create.setRelationshipVectorProperty(r, $embedding_node_property, $vector) "
105104
"RETURN r"
106105
)
107106

@@ -152,7 +151,7 @@ def _get_hybrid_query(
152151
def _get_filtered_vector_query(
153152
filters: dict[str, Any],
154153
node_label: str,
155-
embedding_property: str,
154+
embedding_node_property: str,
156155
embedding_dimension: int,
157156
) -> tuple[str, dict[str, Any]]:
158157
"""Build Cypher query for vector search with filters
@@ -161,7 +160,7 @@ def _get_filtered_vector_query(
161160
Args:
162161
filters (dict[str, Any]): filters used to pre-filter the nodes before vector search
163162
node_label (str): node label we want to search for
164-
embedding_property (str): the name of the property holding the embeddings
163+
embedding_node_property (str): the name of the property holding the embeddings
165164
embedding_dimension (int): the dimension of the embeddings
166165
167166
Returns:
@@ -170,10 +169,10 @@ def _get_filtered_vector_query(
170169
where_filters, query_params = get_metadata_filter(filters, node_alias="node")
171170
base_query = BASE_VECTOR_EXACT_QUERY.format(
172171
node_label=node_label,
173-
embedding_property=embedding_property,
172+
embedding_node_property=embedding_node_property,
174173
)
175174
vector_query = VECTOR_EXACT_QUERY.format(
176-
embedding_property=embedding_property,
175+
embedding_node_property=embedding_node_property,
177176
)
178177
query_params["embedding_dimension"] = embedding_dimension
179178
return f"{base_query} AND ({where_filters}) {vector_query}", query_params
@@ -186,7 +185,6 @@ def get_search_query(
186185
retrieval_query: Optional[str] = None,
187186
node_label: Optional[str] = None,
188187
embedding_node_property: Optional[str] = None,
189-
embedding_property: Optional[str] = None,
190188
embedding_dimension: Optional[int] = None,
191189
filters: Optional[dict[str, Any]] = None,
192190
neo4j_version_is_5_23_or_above: bool = False,
@@ -204,7 +202,7 @@ def get_search_query(
204202
retrieval_query (Optional[str]): Query used to retrieve search results.
205203
Cannot be provided alongside `return_properties`.
206204
node_label (Optional[str]): Label of the nodes to search.
207-
embedding_property (Optional[str])): Name of the property containing the embeddings.
205+
embedding_node_property (Optional[str])): Name of the property containing the embeddings.
208206
embedding_dimension (Optional[int]): Dimension of the embeddings.
209207
filters (Optional[dict[str, Any]]): Filters to pre-filter nodes before vector search.
210208
neo4j_version_is_5_23_or_above (Optional[bool]): Whether the Neo4j version is 5.23 or above.
@@ -218,21 +216,6 @@ def get_search_query(
218216
Exception: If Vector Search with filters is missing required parameters.
219217
ValueError: If an unsupported search type is provided.
220218
"""
221-
warnings.warn(
222-
"embedding_node_property is deprecated, use embedding_property instead",
223-
DeprecationWarning,
224-
stacklevel=2,
225-
)
226-
if embedding_node_property:
227-
if embedding_property:
228-
warnings.warn(
229-
"Both embedding_node_property and embedding_property provided, using embedding_property",
230-
UserWarning,
231-
stacklevel=2,
232-
)
233-
else:
234-
embedding_property = embedding_node_property
235-
236219
if index_type == IndexType.NODE:
237220
if search_type == SearchType.HYBRID:
238221
if filters:
@@ -243,25 +226,25 @@ def get_search_query(
243226
if filters:
244227
if (
245228
node_label is not None
246-
and embedding_property is not None
229+
and embedding_node_property is not None
247230
and embedding_dimension is not None
248231
):
249232
query, params = _get_filtered_vector_query(
250233
filters,
251234
node_label,
252-
embedding_property,
235+
embedding_node_property,
253236
embedding_dimension,
254237
)
255238
else:
256239
raise Exception(
257-
"Vector Search with filters requires: node_label, embedding_property, embedding_dimension"
240+
"Vector Search with filters requires: node_label, embedding_node_property, embedding_dimension"
258241
)
259242
else:
260243
query, params = _get_vector_search_query(index_type=index_type), {}
261244
else:
262245
raise ValueError(f"Search type is not supported: {search_type}")
263246
fallback_return = (
264-
f"RETURN node {{ .*, `{embedding_property}`: null }} AS node, "
247+
f"RETURN node {{ .*, `{embedding_node_property}`: null }} AS node, "
265248
"labels(node) AS nodeLabels, elementId(node) AS elementId, score"
266249
)
267250
elif index_type == IndexType.RELATIONSHIP:
@@ -272,7 +255,7 @@ def get_search_query(
272255
else:
273256
raise ValueError(f"Search type is not supported: {search_type}")
274257
fallback_return = (
275-
f"RETURN relationship {{ .*, `{embedding_property}`: null }} AS relationship, "
258+
f"RETURN relationship {{ .*, `{embedding_node_property}`: null }} AS relationship, "
276259
"elementId(relationship) AS elementId, score"
277260
)
278261
else:

src/neo4j_graphrag/retrievers/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def _fetch_index_infos(self, vector_index_name: str) -> None:
122122
try:
123123
result = query_result.records[0]
124124
self._node_label = result["labels"][0]
125-
self._embedding_property = result["properties"][0]
125+
self._embedding_node_property = result["properties"][0]
126126
self._embedding_dimension = result["dimensions"]
127127
except IndexError as e:
128128
raise Exception(f"No index with name {self.index_name} found") from e

src/neo4j_graphrag/retrievers/hybrid.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def __init__(
118118
else None
119119
)
120120
self.result_formatter = validated_data.result_formatter
121-
self._embedding_property = None
121+
self._embedding_node_property = None
122122
self._embedding_dimension = None
123123
self._fetch_index_infos(self.vector_index_name)
124124

@@ -195,7 +195,7 @@ def get_search_results(
195195
search_query, _ = get_search_query(
196196
search_type=SearchType.HYBRID,
197197
return_properties=self.return_properties,
198-
embedding_property=self._embedding_property,
198+
embedding_node_property=self._embedding_node_property,
199199
neo4j_version_is_5_23_or_above=self.neo4j_version_is_5_23_or_above,
200200
)
201201
sanitized_parameters = copy.deepcopy(parameters)

src/neo4j_graphrag/retrievers/vector.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def __init__(
121121
)
122122
self.result_formatter = validated_data.result_formatter
123123
self._node_label = None
124-
self._embedding_property = None
124+
self._embedding_node_property = None
125125
self._embedding_dimension = None
126126
self._fetch_index_infos(self.index_name)
127127

@@ -201,7 +201,7 @@ def get_search_results(
201201
search_type=SearchType.VECTOR,
202202
return_properties=self.return_properties,
203203
node_label=self._node_label,
204-
embedding_property=self._embedding_property,
204+
embedding_node_property=self._embedding_node_property,
205205
embedding_dimension=self._embedding_dimension,
206206
filters=filters,
207207
)
@@ -292,7 +292,7 @@ def __init__(
292292
)
293293
self.result_formatter = validated_data.result_formatter
294294
self._node_label = None
295-
self._node_embedding_property = None
295+
self._node_embedding_node_property = None
296296
self._embedding_dimension = None
297297
self._fetch_index_infos(self.index_name)
298298

@@ -364,7 +364,7 @@ def get_search_results(
364364
search_type=SearchType.VECTOR,
365365
retrieval_query=self.retrieval_query,
366366
node_label=self._node_label,
367-
embedding_property=self._node_embedding_property,
367+
embedding_node_property=self._node_embedding_node_property,
368368
embedding_dimension=self._embedding_dimension,
369369
filters=filters,
370370
)

tests/e2e/test_vector_e2e.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def test_vector_retriever_search_text(
3737
assert isinstance(results, RetrieverResult)
3838
assert len(results.items) == 5
3939
for result in results.items:
40-
assert f"'{retriever._embedding_property}': None" in result.content
40+
assert f"'{retriever._embedding_node_property}': None" in result.content
4141
assert isinstance(result, RetrieverResultItem)
4242

4343

@@ -82,7 +82,7 @@ def test_vector_retriever_search_vector(driver: Driver) -> None:
8282
assert isinstance(results, RetrieverResult)
8383
assert len(results.items) == 5
8484
for result in results.items:
85-
assert f"'{retriever._embedding_property}': None" in result.content
85+
assert f"'{retriever._embedding_node_property}': None" in result.content
8686
assert isinstance(result, RetrieverResultItem)
8787

8888

tests/unit/retrievers/test_hybrid.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def test_hybrid_search_text_happy_path(
184184
driver, vector_index_name, fulltext_index_name, embedder
185185
)
186186
retriever.neo4j_version_is_5_23_or_above = True
187-
retriever._embedding_property = (
187+
retriever._embedding_node_property = (
188188
"embedding" # variable normally filled by fetch_index_infos
189189
)
190190
retriever.driver.execute_query.return_value = [ # type: ignore
@@ -194,7 +194,7 @@ def test_hybrid_search_text_happy_path(
194194
]
195195
search_query, _ = get_search_query(
196196
SearchType.HYBRID,
197-
embedding_property="embedding",
197+
embedding_node_property="embedding",
198198
neo4j_version_is_5_23_or_above=retriever.neo4j_version_is_5_23_or_above,
199199
)
200200

tests/unit/test_neo4j_queries.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_vector_search_with_filters(_mock: Any) -> None:
9191
result, params = get_search_query(
9292
SearchType.VECTOR,
9393
node_label="Label",
94-
embedding_property="vector",
94+
embedding_node_property="vector",
9595
embedding_dimension=1,
9696
filters={"field": "value"},
9797
)
@@ -117,7 +117,7 @@ def test_vector_search_with_params_from_filters(_mock: Any) -> None:
117117
result, params = get_search_query(
118118
SearchType.VECTOR,
119119
node_label="Label",
120-
embedding_property="vector",
120+
embedding_node_property="vector",
121121
embedding_dimension=1,
122122
filters={"field": "value"},
123123
)

0 commit comments

Comments
 (0)