Advanced: ALONG, FOLD, BEST BY¶
ALONG (Path-Carried Values)¶
ALONG carries state through recursive expansion.
CREATE RULE shortest AS
MATCH (a)-[e:EDGE]->(b)
ALONG dist = prev.dist + e.weight
YIELD KEY a, KEY b, dist
Use prev.<field> to reference prior recursive step values.
FOLD (Aggregation)¶
FOLD aggregates rule outputs after derivation.
For recursion, monotonic variants are used where required.
BEST BY (Witness Selection)¶
BEST BY picks the best candidate row by ordering expression.
CREATE RULE cheapest AS
MATCH (a)-[e:EDGE]->(b)
ALONG cost = prev.cost + e.weight
BEST BY cost ASC
YIELD KEY a, KEY b, cost
Using similar_to in ALONG and BEST BY¶
The similar_to() expression function works in ALONG accumulators and BEST BY selectors, enabling semantic similarity scoring along recursive paths.
Semantic Relevance Along Paths¶
CREATE RULE semantic_path AS
MATCH (a:Document)-[:LINKS_TO]->(b:Document)
ALONG relevance = prev.relevance * similar_to(b.embedding, $query)
YIELD KEY a, KEY b, relevance
Best Semantically Similar Path¶
CREATE RULE best_match AS
MATCH (a:Topic)-[:RELATED]->(b:Topic)
ALONG score = prev.score + similar_to(b.embedding, $query)
BEST BY score DESC
YIELD KEY a, KEY b, score
Hybrid Scoring in Rules¶
CREATE RULE hybrid_relevant AS
MATCH (q:Query)-[:SEARCHES]->(d:Document)
WHERE similar_to([d.embedding, d.content], q.text,
{method: 'weighted', weights: [0.7, 0.3]}) > 0.5
YIELD KEY q, KEY d
See the Vector Search guide for full similar_to documentation.
Practical Guidance¶
- Use
ALONGfor accumulators (distance, risk, confidence, similarity). - Use
FOLDwhen you need grouped summaries. - Use
BEST BYwhen you need one witness path, not all candidates.