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.

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

User-defined fields require the attributes. prefix. For example:

node-type:service
node-status.type:error
attributes.owner:alice
attributes.region~us-east

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 are searchable. Channel-driven or parameter-bound status values are live render data and do not appear in search.

Compare typed values

attributes.cpu_cores>=8
attributes.replicas<4
attributes.environment!=development
attributes.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

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: 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

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. After : or ~, it can also suggest known values for root enum-like fields and repeated low-cardinality string attributes. 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.

Click a result to navigate to its node. The result 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 re-evaluates whenever the graph document changes, using the same matching rules as interactive search. Live channel values do not appear in search.

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:error OR node-status.type: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)

The search panel showing query diagnostics and visible and hidden results

What’s next

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