
Recommendation patterns
A map from the recommendation you want to the signals that build it.
More like this — text
One embedding signal over the item's description; drop the seed; cut off below ~0.65. The single-signal Similar lookup is enough.
People also bought — graph A PageSpace (graph-embeddings) signal: items bought by behaviourally-similar customers. Text is irrelevant — topology carries the recommendation.
Personalised feed — graph + history
Content-similarity signals fused, then a BoostByRank rule on the user's own interactions, and a TransformFusedScore recency decay. Always FilterAsUser(CurrentUser).
Duplicate detection — text Before creating a new ticket, check for a near-duplicate. Seed by query text → embedding similarity → return results above 0.85, surfaced before the user submits.
Similar accounts — graph + graph
Two graph signals — shared product mix and shared segment — fused with RRF, scoped with FilterAsUser. The engine behind "accounts like this one" in a CRM:
var result = await scope.Graph.Query()
.StartAt(seed)
.ToSimilarity(o => o.MaxCandidates(count))
.AddSignal("by-product-mix", s => s.Weight(2.0f).From(ctx => ctx.Graph.Query()
.StartAt(seed).Out(N.Product.Type, E.Purchased).In(N.Account.Type, E.Purchased)
.Except(ctx.Graph.Query().StartAt(seed)).AsUIDEnumerable()))
.AddSignal("by-segment", s => s.Weight(1.0f).From(ctx => ctx.Graph.Query()
.StartAt(seed).Out(N.Segment.Type, E.InSegment).In(N.Account.Type, E.InSegment)
.Except(ctx.Graph.Query().StartAt(seed)).AsUIDEnumerable()))
.Fuse(f => f.UsingReciprocalRankFusion())
.FilterAsUser(scope.CurrentUser)
.ExecuteAsync(scope.CancellationToken);
RAG candidate generation — text
Before sending context to an LLM, retrieve the most relevant chunks. StartAtSimilarTextAsync with the user's query as seed; top-k = 8 is a common starting point.
Going further: feed many similarity results into a WeightedGraph, extract clusters, and render them with ForceGraphView to visualise the recommendation neighbourhood. And once a recommendation tool exists, an agent can call it mid-conversation.