Search and DSL

Find nodes with fuzzy free text or precise field-aware queries

Open Search with Ctrl+F on Windows/Linux or Cmd+F on macOS. Search covers the whole graph, including nodes hidden by the current filter stack, and can turn any valid query into a persistent smart filter.

For every operator and edge case, see the DSL Syntax reference.

Type two or more characters to search labels, IDs, paths, node types, literal statuses, and scalar attribute values. Two-character input uses case-insensitive substring matching; queries of three or more characters are ranked and tolerate small typos. Free text never searches realtime channel values.

api
databse
customer gateway

Use free text when you do not know which field contains the value. Typo tolerance applies only to free text.

Search a specific field

Built-in root fields are:

  • id
  • label
  • path
  • node-type
  • node-status.type

Document fields require the attributes. prefix. Realtime channels require channels.. For example:

node-type:service
node-status.type:base/critical
attributes.owner:alice
attributes.region~us-east
channels.health=critical
channels.latency>500

The : and ~ operators are identical case-insensitive substring matches. They are not typo-tolerant. Use = for exact, case-sensitive string equality:

attributes.environment=production
label="Customer API"

Only literal node-status.type values in the document appear under that field. If a channel drives the status, query the declared channel itself, such as channels.health=base/critical.

Channel queries use the same resolved value as the renderer. A fresh received value wins. If it becomes stale or has not arrived, search uses the channel’s default. Without a default, missing:channels.<key> matches.

Compare typed values

attributes.cpu_cores>=8
attributes.replicas<4
attributes.environment!=development
attributes.enabled=true
channels.enabled=true

Numbers are compared numerically only when the graph field is an actual number and the query contains a complete numeric literal. Numeric-looking strings are not coerced. Strings compare exactly or lexicographically; booleans support = and !=.

Inclusive numeric ranges use ..:

attributes.cpu_cores:4..16
attributes.priority~1..3
channels.latency:100..500

Ranges do not apply to dates or numeric-looking strings.

Find present, missing, or empty fields

has:attributes.owner
missing:attributes.region
empty:attributes.description
has:channels.version
  • has: matches a field that is present and not null, including an empty string or array.
  • missing: matches an absent, undefined, or null field.
  • empty: matches a whitespace-only string or empty array that is present.

Search strings and arrays with contains

attributes.tags contains critical
attributes.owner contains acme
label contains API
channels.tags contains api

contains is case-insensitive. An array matches when any scalar element contains the requested text.

Combine conditions

AND and OR are case-insensitive. Precedence is conventional: parentheses first, then AND, then OR.

node-type:server OR node-type:database AND attributes.region:us-east

This means node-type:server OR (node-type:database AND attributes.region:us-east). Add parentheses whenever the intended grouping is not obvious:

(node-type:server OR node-type:database) AND attributes.region:us-east
node-type:service AND (attributes.owner:alice OR attributes.owner:bob)

Quote values safely

Double quotes group spaces, parentheses, and reserved words without changing matching behavior:

label:"Customer API"
attributes.description:"contains AND operator"
label="Exact API name"

Escape a quote inside a value with \" and a backslash with \\.

Autocomplete and validation

Autocomplete suggests searchable fields as you type, including declared channels.* fields. After : or ~, it can also suggest known values for root enum-like fields and repeated low-cardinality string attributes. Realtime channel values are never offered as value suggestions. Suggestions come from the current graph and values that need quoting are quoted automatically.

The editor highlights query structure and reports positioned diagnostics. Invalid syntax, unknown root fields, and invalid ranges are errors; an absent attributes.* field is a warning because a later graph update may add it. Invalid queries do not run and cannot be converted into smart filters.

Queries have safety limits of 1,000 characters, 512 tokens, and 32 nested groups.

Work with results

Results are divided into:

  • Visible results: nodes currently present on the canvas.
  • Hidden results: matching nodes hidden by active filters.

Double-click a result to reveal and focus its node. For keyboard navigation, focus the result row and press Enter. The row shows the matching field and highlights direct substring matches.

Create smart filters

The menu beneath the results provides three actions:

  • Isolate results: show only matching nodes and required hierarchy.
  • Add hidden results: add matching hidden nodes to the current view.
  • Exclude results: hide matching nodes.

A smart filter stores the query rather than a fixed list of nodes. It uses the same matching rules as interactive search and re-evaluates after graph document changes, realtime channel batches, and channel expiry transitions.

Smart filters are preserved in bookmarks and compressed URL view state. Schematify automatically preserves the grouping of queries saved by older versions. A historical query that is no longer valid stays visible with an error and selects no nodes.

Practical examples

Find production services:

node-type:service AND attributes.environment=production

Find errors recorded literally in the graph document:

node-status.type:base/critical OR node-status.type:base/warning

Find large resources:

attributes.cpu_cores>=8 OR attributes.memory_gb>=32

Audit incomplete metadata:

missing:attributes.owner OR empty:attributes.description

Find critical resources owned by either team:

attributes.tags contains critical AND (attributes.owner:platform OR attributes.owner:infrastructure)

Find services whose current health channel is critical:

node-type:service AND channels.health=critical

What’s next

  • DSL Syntax covers the complete language.
  • Filtering explains filter types and composition.
  • Bookmarks covers saving and restoring smart-filter views.