Search Configuration
The workspace ships one unified search engine that runs full-text and vector retrieval over the same nodes, with graph relationships available as facets and constraints. This section is the operator-facing reference for tuning that engine — which fields are searchable, how they rank, where embeddings apply, what facets users see.
The page-by-page UI walkthrough lives inside the workspace itself; this section concentrates on what each lever does so you can pick the right one.
Engine, in one diagram
flowchart LR
Query[Search query text] --> BM25[BM25 over<br/>indexed fields]
Query --> Embed[Embedding<br/>lookup]
Filter[Facets / TargetUIDs] --> Combine[Hybrid combine<br/>+ filter]
BM25 --> Combine
Embed --> Combine
Combine --> Rank[Optional<br/>semantic rerank]
Rank --> ACL[ACL filter<br/>per caller]
ACL --> Results[(Ranked results)]
Each arrow corresponds to a setting you control:
| Arrow | Configured under |
|---|---|
| Indexed fields | Full text search |
| Field weights / ranking | Ranking and boosting |
| Facets and time filters | Filters and facets |
| Embeddings + chunking | AI search |
| Semantic rerank | AI search |
| Caller ACL | Permission-aware search |
| Custom index code | Search execution scopes |
In this section
- Full text search — pick fields, set "searchable" toggle, configure synonyms.
- Ranking and boosting — BM25 field weights, graph-driven scoring.
- Filters and facets — property facets, related-node facets, time filter scoping.
- AI search — embedding selection, chunking, similarity cutoffs.
- Relevance tuning — iterative tuning playbook.
- Search execution scopes — variables and methods in custom index code.
Programmatic counterparts
The settings here map 1:1 to fields on SearchRequest, which custom endpoints use to drive search:
var req = SearchRequest.For("battery drain");
req.BeforeTypesFacet = new HashSet<string> { "SupportCase" };
req.TargetUIDs = devicesUIDs;
req.HybridSearch = true;
var query = await Graph.CreateSearchAsUserAsync(req, CurrentUser, CancellationToken);
return query.Take(20).Emit();
See Custom endpoint from scratch for the full request shape and Permission-aware search for the ACL half.