14
14
# limitations under the License.
15
15
from __future__ import annotations
16
16
17
- import warnings
18
17
from typing import Any , Optional
19
18
20
19
from neo4j_graphrag .filters import get_metadata_filter
21
20
from neo4j_graphrag .types import IndexType , SearchType
22
21
23
22
VECTOR_EXACT_QUERY = (
24
23
"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 "
26
25
"ORDER BY score DESC LIMIT $top_k"
27
26
)
28
27
29
28
BASE_VECTOR_EXACT_QUERY = (
30
29
"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)"
33
32
)
34
33
35
34
93
92
"MATCH (n) "
94
93
"WHERE elementId(n) = $node_element_id "
95
94
"WITH n "
96
- "CALL db.create.setNodeVectorProperty(n, $embedding_property , $vector) "
95
+ "CALL db.create.setNodeVectorProperty(n, $embedding_node_property , $vector) "
97
96
"RETURN n"
98
97
)
99
98
100
99
UPSERT_VECTOR_ON_RELATIONSHIP_QUERY = (
101
100
"MATCH ()-[r]->() "
102
101
"WHERE elementId(r) = $rel_element_id "
103
102
"WITH r "
104
- "CALL db.create.setRelationshipVectorProperty(r, $embedding_property , $vector) "
103
+ "CALL db.create.setRelationshipVectorProperty(r, $embedding_node_property , $vector) "
105
104
"RETURN r"
106
105
)
107
106
@@ -152,7 +151,7 @@ def _get_hybrid_query(
152
151
def _get_filtered_vector_query (
153
152
filters : dict [str , Any ],
154
153
node_label : str ,
155
- embedding_property : str ,
154
+ embedding_node_property : str ,
156
155
embedding_dimension : int ,
157
156
) -> tuple [str , dict [str , Any ]]:
158
157
"""Build Cypher query for vector search with filters
@@ -161,7 +160,7 @@ def _get_filtered_vector_query(
161
160
Args:
162
161
filters (dict[str, Any]): filters used to pre-filter the nodes before vector search
163
162
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
165
164
embedding_dimension (int): the dimension of the embeddings
166
165
167
166
Returns:
@@ -170,10 +169,10 @@ def _get_filtered_vector_query(
170
169
where_filters , query_params = get_metadata_filter (filters , node_alias = "node" )
171
170
base_query = BASE_VECTOR_EXACT_QUERY .format (
172
171
node_label = node_label ,
173
- embedding_property = embedding_property ,
172
+ embedding_node_property = embedding_node_property ,
174
173
)
175
174
vector_query = VECTOR_EXACT_QUERY .format (
176
- embedding_property = embedding_property ,
175
+ embedding_node_property = embedding_node_property ,
177
176
)
178
177
query_params ["embedding_dimension" ] = embedding_dimension
179
178
return f"{ base_query } AND ({ where_filters } ) { vector_query } " , query_params
@@ -186,7 +185,6 @@ def get_search_query(
186
185
retrieval_query : Optional [str ] = None ,
187
186
node_label : Optional [str ] = None ,
188
187
embedding_node_property : Optional [str ] = None ,
189
- embedding_property : Optional [str ] = None ,
190
188
embedding_dimension : Optional [int ] = None ,
191
189
filters : Optional [dict [str , Any ]] = None ,
192
190
neo4j_version_is_5_23_or_above : bool = False ,
@@ -204,7 +202,7 @@ def get_search_query(
204
202
retrieval_query (Optional[str]): Query used to retrieve search results.
205
203
Cannot be provided alongside `return_properties`.
206
204
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.
208
206
embedding_dimension (Optional[int]): Dimension of the embeddings.
209
207
filters (Optional[dict[str, Any]]): Filters to pre-filter nodes before vector search.
210
208
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(
218
216
Exception: If Vector Search with filters is missing required parameters.
219
217
ValueError: If an unsupported search type is provided.
220
218
"""
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
-
236
219
if index_type == IndexType .NODE :
237
220
if search_type == SearchType .HYBRID :
238
221
if filters :
@@ -243,25 +226,25 @@ def get_search_query(
243
226
if filters :
244
227
if (
245
228
node_label is not None
246
- and embedding_property is not None
229
+ and embedding_node_property is not None
247
230
and embedding_dimension is not None
248
231
):
249
232
query , params = _get_filtered_vector_query (
250
233
filters ,
251
234
node_label ,
252
- embedding_property ,
235
+ embedding_node_property ,
253
236
embedding_dimension ,
254
237
)
255
238
else :
256
239
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"
258
241
)
259
242
else :
260
243
query , params = _get_vector_search_query (index_type = index_type ), {}
261
244
else :
262
245
raise ValueError (f"Search type is not supported: { search_type } " )
263
246
fallback_return = (
264
- f"RETURN node {{ .*, `{ embedding_property } `: null }} AS node, "
247
+ f"RETURN node {{ .*, `{ embedding_node_property } `: null }} AS node, "
265
248
"labels(node) AS nodeLabels, elementId(node) AS elementId, score"
266
249
)
267
250
elif index_type == IndexType .RELATIONSHIP :
@@ -272,7 +255,7 @@ def get_search_query(
272
255
else :
273
256
raise ValueError (f"Search type is not supported: { search_type } " )
274
257
fallback_return = (
275
- f"RETURN relationship {{ .*, `{ embedding_property } `: null }} AS relationship, "
258
+ f"RETURN relationship {{ .*, `{ embedding_node_property } `: null }} AS relationship, "
276
259
"elementId(relationship) AS elementId, score"
277
260
)
278
261
else :
0 commit comments