Skip to content

Commit 7ae97dd

Browse files
authored
Use routing_=READ for all read queries (#217)
* Use routing_=neo4j.RoutingControl.READ for all READ queries * Update CHANGELOG
1 parent 99315c4 commit 7ae97dd

File tree

17 files changed

+70
-12
lines changed

17 files changed

+70
-12
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
### Changed
1414
- Updated all examples to use `neo4j_database` parameter instead of an undocumented neo4j driver constructor.
15+
- All `READ` queries are now routed to a reader replica (for clusters). This impacts all retrievers, the `Neo4jChunkReader` and `SinglePropertyExactMatchResolver` components.
16+
1517

1618
## 1.2.0
1719

src/neo4j_graphrag/experimental/components/neo4j_reader.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ async def run(
9797
result, _, _ = self.driver.execute_query(
9898
query,
9999
database_=self.neo4j_database,
100+
routing_=neo4j.RoutingControl.READ,
100101
)
101102
chunks = []
102103
for record in result:

src/neo4j_graphrag/experimental/components/resolver.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ async def run(self) -> ResolutionStats:
9494
match_query += self.filter_query
9595
stat_query = f"{match_query} RETURN count(entity) as c"
9696
records, _, _ = self.driver.execute_query(
97-
stat_query, database_=self.neo4j_database
97+
stat_query,
98+
database_=self.neo4j_database,
9899
)
99100
number_of_nodes_to_resolve = records[0].get("c")
100101
if number_of_nodes_to_resolve == 0:

src/neo4j_graphrag/retrievers/base.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ def __init__(self, driver: neo4j.Driver, neo4j_database: Optional[str] = None):
8989

9090
def _get_version(self) -> tuple[tuple[int, ...], bool]:
9191
records, _, _ = self.driver.execute_query(
92-
"CALL dbms.components()", database_=self.neo4j_database
92+
"CALL dbms.components()",
93+
database_=self.neo4j_database,
94+
routing_=neo4j.RoutingControl.READ,
9395
)
9496
version = records[0]["versions"][0]
9597
# drop everything after the '-' first
@@ -145,7 +147,10 @@ def _fetch_index_infos(self, vector_index_name: str) -> None:
145147
"options.indexConfig.`vector.dimensions` as dimensions"
146148
)
147149
query_result = self.driver.execute_query(
148-
query, {"index_name": vector_index_name}, database_=self.neo4j_database
150+
query,
151+
{"index_name": vector_index_name},
152+
database_=self.neo4j_database,
153+
routing_=neo4j.RoutingControl.READ,
149154
)
150155
try:
151156
result = query_result.records[0]

src/neo4j_graphrag/retrievers/external/pinecone/pinecone.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,10 @@ def get_search_results(
234234
logger.debug("Pinecone Store Cypher query: %s", search_query)
235235

236236
records, _, _ = self.driver.execute_query(
237-
search_query, parameters, database_=self.neo4j_database
237+
search_query,
238+
parameters,
239+
database_=self.neo4j_database,
240+
routing_=neo4j.RoutingControl.READ,
238241
)
239242

240243
return RawSearchResult(records=records)

src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,10 @@ def get_search_results(
228228
logger.debug("Qdrant Store Cypher query: %s", search_query)
229229

230230
records, _, _ = self.driver.execute_query(
231-
search_query, parameters, database_=self.neo4j_database
231+
search_query,
232+
parameters,
233+
database_=self.neo4j_database,
234+
routing_=neo4j.RoutingControl.READ,
232235
)
233236

234237
return RawSearchResult(records=records)

src/neo4j_graphrag/retrievers/external/weaviate/weaviate.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,10 @@ def get_search_results(
245245
logger.debug("Weaviate Store Cypher query: %s", search_query)
246246

247247
records, _, _ = self.driver.execute_query(
248-
search_query, parameters, database_=self.neo4j_database
248+
search_query,
249+
parameters,
250+
database_=self.neo4j_database,
251+
routing_=neo4j.RoutingControl.READ,
249252
)
250253

251254
return RawSearchResult(records=records)

src/neo4j_graphrag/retrievers/hybrid.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,10 @@ def get_search_results(
201201
logger.debug("HybridRetriever Cypher query: %s", search_query)
202202

203203
records, _, _ = self.driver.execute_query(
204-
search_query, parameters, database_=self.neo4j_database
204+
search_query,
205+
parameters,
206+
database_=self.neo4j_database,
207+
routing_=neo4j.RoutingControl.READ,
205208
)
206209
return RawSearchResult(
207210
records=records,
@@ -358,7 +361,10 @@ def get_search_results(
358361
logger.debug("HybridRetriever Cypher query: %s", search_query)
359362

360363
records, _, _ = self.driver.execute_query(
361-
search_query, parameters, database_=self.neo4j_database
364+
search_query,
365+
parameters,
366+
database_=self.neo4j_database,
367+
routing_=neo4j.RoutingControl.READ,
362368
)
363369
return RawSearchResult(
364370
records=records,

src/neo4j_graphrag/retrievers/text2cypher.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ def get_search_results(
167167
t2c_query = llm_result.content
168168
logger.debug("Text2CypherRetriever Cypher query: %s", t2c_query)
169169
records, _, _ = self.driver.execute_query(
170-
query_=t2c_query, database_=self.neo4j_database
170+
query_=t2c_query,
171+
database_=self.neo4j_database,
172+
routing_=neo4j.RoutingControl.READ,
171173
)
172174
except CypherSyntaxError as e:
173175
raise Text2CypherRetrievalError(

src/neo4j_graphrag/retrievers/vector.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,10 @@ def get_search_results(
207207
logger.debug("VectorRetriever Cypher query: %s", search_query)
208208

209209
records, _, _ = self.driver.execute_query(
210-
search_query, parameters, database_=self.neo4j_database
210+
search_query,
211+
parameters,
212+
database_=self.neo4j_database,
213+
routing_=neo4j.RoutingControl.READ,
211214
)
212215
return RawSearchResult(records=records)
213216

@@ -363,7 +366,10 @@ def get_search_results(
363366
logger.debug("VectorCypherRetriever Cypher query: %s", search_query)
364367

365368
records, _, _ = self.driver.execute_query(
366-
search_query, parameters, database_=self.neo4j_database
369+
search_query,
370+
parameters,
371+
database_=self.neo4j_database,
372+
routing_=neo4j.RoutingControl.READ,
367373
)
368374
return RawSearchResult(
369375
records=records,

0 commit comments

Comments
 (0)