Skip to content

Query DSL

The --query / -q flag on stare search commands accepts a simple filter expression validated and normalized client-side before being sent to the server. Each search command validates against the field catalogue for its own record type. See the endpoint status table for which commands currently accept --query.

Grammar

// Generic DSL grammar — no field names hard-coded.
// Syntax only; field/operator semantics validated downstream.
//
// NULL sentinel: the API-defined token __EMPTY__ (quoted or bare) is used to
// compare a field against NULL, e.g.  "publicShortTitle" = "__EMPTY__".
// It is matched as an ordinary VALUE (bare) or STRING (quoted) — no special rule.

?expression: or_expr
?or_expr: and_expr
        | or_expr _OR and_expr          -> or_expr
?and_expr: term
         | and_expr _AND term           -> and_expr
?term: condition
     | "(" expression ")"
condition: field OP value              -> condition

field: IDENT | STRING
value: VALUE | STRING

OP: "=" | "!=" | "contain"i | "not-contain"i
_AND: /[Aa][Nn][Dd]/
_OR:  /[Oo][Rr]/

IDENT: /[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*/
VALUE: /[^\s()"]+/
STRING: /"[^"\n\r\t\f\v]*"/

%import common.WS
%ignore WS

and / or are case-insensitive at parse time; canonical output is uppercase (AND, OR).

Operators

Operator Meaning
= Exact match
!= Not equal
contain Field contains the value (array membership or substring)
not-contain Field does not contain the value

Boolean fields only support = and !=

Some fields are boolean (e.g. analysisTeam.isContactEditor, phase0.editorialBoard.isChair). Using contain or not-contain on these fields raises a DSLValidationError at parse time. Their values are typically "true" or "false".

Comparing against NULL

Use the special token __EMPTY__ as the value to test whether a field is NULL. Both the bare and quoted forms are accepted; the API documentation consistently uses the quoted form:

# Find analyses with no public short title set
stare analysis search -q 'publicShortTitle = "__EMPTY__"'

# Find papers where shortTitle is not NULL
stare paper search -q 'shortTitle != "__EMPTY__"'

__EMPTY__ is treated as an ordinary string token by the parser — it receives no special validation.

Field names

Fields accept either camelCase or snake_case — both are normalized to camelCase before being sent to the server:

# These are equivalent:
stare analysis search -q 'referenceCode = ANA-HION-2018-01'
stare analysis search -q 'reference_code = ANA-HION-2018-01'

Nested fields use a dot separator: metadata.keywords, phase0.state.

Field catalogue is generated

Run pixi run extract-fields after an API update to regenerate both src/stare/dsl/data/fields.toml and the tables below.

Quoting

Both the field name and the value may optionally be wrapped in double quotes. Quotes are required on the value when it is empty or contains spaces, parentheses, or square brackets; for everything else they are optional.

The grammar's string token (STRING: /"[^"\n\r\t\f\v]*"/) restricts quoted values to printable characters plus spaces — it excludes embedded double-quotes and all non-space whitespace (tabs, newlines, carriage returns, form feeds, and vertical tabs). Values containing any of those characters are rejected at parse time. If your value contains a literal ", use contain with a non-quote substring instead; escaped-quote support is not yet implemented.

# These are equivalent:
stare analysis search -q 'referenceCode = HION'
stare analysis search -q '"referenceCode" = HION'
stare analysis search -q 'referenceCode = "HION"'

# Multi-word values require quotes:
stare analysis search -q 'shortTitle = "Phase Closed"'
stare paper search -q '"phase2.state" = "Phase Closed"'

Canonical output (to_dsl()) emits quotes on the value only when they are required; bare single-token values are always emitted unquoted. Fields are always emitted bare after normalization.

Only " (double quotes) are accepted — single quotes are not special.

Values

Values are bare tokens or double-quoted strings. A bare value like ANA-HION-2018-01 or Active works without quotes. Double quotes are required when the value is empty or contains spaces, parentheses, or square brackets:

# bare value — no quotes needed
stare analysis search -q 'metadata.keywords contain jets'

# space in value — quotes required
stare analysis search -q 'shortTitle = "Phase Closed"'

# quoted field, bare value — both forms mix freely
stare analysis search -q '"phase0.state" = Active'

Combining conditions

# AND (both must match)
stare analysis search -q 'status = Active and groups.leadingGroup = HDBS'

# OR (either may match)
stare analysis search -q 'status = Active or status = Approved'

AND binds tighter than OR: a = 1 AND b = 2 OR c = 3 is parsed as (a = 1 AND b = 2) OR c = 3.

Parentheses are not supported by the server

The grammar accepts parentheses, but the Glance API ignores them. stare will log a warning and send the query without parentheses. Rely on AND binding tighter than OR instead of explicit grouping.

Sorting

--sort-by and --sort-desc are independent of the query string and work with any search command:

stare analysis search -q 'status = Active' --sort-by creationDate --sort-desc
stare paper search --sort-by referenceCode

Skipping validation

Use --no-validate to bypass client-side field checking and send the raw string directly to the server. This is useful for experimental server fields or when you know the DSL is already in canonical form:

stare analysis search -q 'someNewField = value' --no-validate

Analysis fields

Group Fields
Top-level creationDate, publicShortTitle, referenceCode, shortTitle, status
amiGlance amiGlance.label, amiGlance.url
analysisTeam analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName
documentation documentation.repositories.gitlabId, documentation.repositories.type, documentation.repositories.url, documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url
groups groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name
metadata metadata.analysisFramework.histogramming, metadata.analysisFramework.ntupling, metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.datasets.name, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name, metadata.triggers.name
phase0 phase0.approvalMeeting.comments, phase0.approvalMeeting.date, phase0.approvalMeeting.label, phase0.approvalMeeting.title, phase0.approvalMeeting.url, phase0.datasetUsed, phase0.editorialBoard.cernCcid, phase0.editorialBoard.email, phase0.editorialBoard.firstName, phase0.editorialBoard.isChair, phase0.editorialBoard.isExOfficio, phase0.editorialBoard.lastName, phase0.editorialBoardFormedDate, phase0.editorialBoardRequestMeeting.comments, phase0.editorialBoardRequestMeeting.date, phase0.editorialBoardRequestMeeting.label, phase0.editorialBoardRequestMeeting.title, phase0.editorialBoardRequestMeeting.url, phase0.eoiMeeting.comments, phase0.eoiMeeting.date, phase0.eoiMeeting.label, phase0.eoiMeeting.title, phase0.eoiMeeting.url, phase0.mainPhysicsAim, phase0.methods, phase0.modelTested, phase0.pgcOrSgcSignOffDate, phase0.preApprovalMeeting.comments, phase0.preApprovalMeeting.date, phase0.preApprovalMeeting.label, phase0.preApprovalMeeting.title, phase0.preApprovalMeeting.url, phase0.startDate, phase0.state
relatedPublications relatedPublications.referenceCode, relatedPublications.type

CONF note fields

Group Fields
Top-level finalReferenceCode, fullTitle, publicShortTitle, shortTitle, status, temporaryReferenceCode
analysisTeam analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName
documentation documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url
groups groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name
metadata metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name
phase1 phase1.draftCdsUrl, phase1.editorialBoard.cernCcid, phase1.editorialBoard.email, phase1.editorialBoard.firstName, phase1.editorialBoard.isChair, phase1.editorialBoard.isExOfficio, phase1.editorialBoard.lastName, phase1.editorialBoardDraftSignOffDate, phase1.editorialBoardFormedDate, phase1.firstSignOffDate, phase1.firstSignOffResponsible.cernCcid, phase1.firstSignOffResponsible.email, phase1.firstSignOffResponsible.firstName, phase1.firstSignOffResponsible.lastName, phase1.pgcApprovalDate, phase1.presentationDate, phase1.publicWebPageURLForFiguresAndTables, phase1.releaseDate, phase1.secondSignOffDate, phase1.secondSignOffResponsible.cernCcid, phase1.secondSignOffResponsible.email, phase1.secondSignOffResponsible.firstName, phase1.secondSignOffResponsible.lastName, phase1.startDate, phase1.state
relatedAnalysis relatedAnalysis.referenceCode, relatedAnalysis.type
supersededBy supersededBy.referenceCode, supersededBy.type

PUB note fields

Group Fields
Top-level finalReferenceCode, fullTitle, publicShortTitle, shortTitle, status, temporaryReferenceCode
analysisTeam analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName
documentation documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url
groups groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name
metadata metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name
phase1 phase1.atlasCirculationDate, phase1.draftCdsUrl, phase1.firstReaderDraftSignOffDate, phase1.firstReaderSignOffDate, phase1.groupApprovalDate, phase1.presentationDate, phase1.proceedToSignOffDate, phase1.publicWebPageURLForFiguresAndTables, phase1.readers.cernCcid, phase1.readers.email, phase1.readers.firstName, phase1.readers.isFirstReader, phase1.readers.isSecondReader, phase1.readers.lastName, phase1.releaseDate, phase1.secondReaderSignOffDate, phase1.startDate, phase1.state
relatedAnalysis relatedAnalysis.referenceCode, relatedAnalysis.type
supersededBy supersededBy.referenceCode, supersededBy.type

Paper fields

Group Fields
Top-level fullTitle, publicShortTitle, referenceCode, rivetRoutinesUrl, shortTitle, status
analysisTeam analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName
documentation documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url
groups groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name
metadata metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name
phase1 phase1.atlasMeetingDate, phase1.draftReleasedDate, phase1.editorialBoard.cernCcid, phase1.editorialBoard.email, phase1.editorialBoard.firstName, phase1.editorialBoard.isChair, phase1.editorialBoard.isExOfficio, phase1.editorialBoard.lastName, phase1.editorialBoardDraftSignOffDate, phase1.editorialBoardFormedDate, phase1.languageEditorsSignOffDate, phase1.pgcApprovalDate, phase1.presentationDate, phase1.pubcommChairOrDeputyOrDelegated.cernCcid, phase1.pubcommChairOrDeputyOrDelegated.email, phase1.pubcommChairOrDeputyOrDelegated.firstName, phase1.pubcommChairOrDeputyOrDelegated.lastName, phase1.pubcommSignOffDate, phase1.spokespersonOrDeputyOrDelegated.cernCcid, phase1.spokespersonOrDeputyOrDelegated.email, phase1.spokespersonOrDeputyOrDelegated.firstName, phase1.spokespersonOrDeputyOrDelegated.lastName, phase1.startDate, phase1.state
phase2 phase2.draft2CernSignOffDate, phase2.draft2ReleasedDate, phase2.draft2SentToCernDate, phase2.editorialBoardDraft2SignOffDate, phase2.editorialBoardRevisedSignOffDate, phase2.paperClosureDate, phase2.paperClosureMeeting.label, phase2.paperClosureMeeting.url, phase2.preliminaryPlotsAndResultsReleased, phase2.pubcommChairOrDeputyOrDelegated.cernCcid, phase2.pubcommChairOrDeputyOrDelegated.email, phase2.pubcommChairOrDeputyOrDelegated.firstName, phase2.pubcommChairOrDeputyOrDelegated.lastName, phase2.pubcommChairOrDeputySignOffDate, phase2.spokespersonDelegatedSignOffDate, phase2.spokespersonOrDeputySignOffDate, phase2.startDate, phase2.state
publicationPhase publicationPhase.1stProofDate, publicationPhase.1stRefereeReportDate, publicationPhase.arXivSubmissionDate, publicationPhase.arXivUrls.label, publicationPhase.arXivUrls.url, publicationPhase.finalJournalPublication.label, publicationPhase.finalJournalPublication.url, publicationPhase.finalSubmissionJournal, publicationPhase.finalTitleTex, publicationPhase.journalAcceptanceDate, publicationPhase.physicsBriefing.label, publicationPhase.physicsBriefing.url, publicationPhase.publishedOnlineDate, publicationPhase.startDate, publicationPhase.state
relatedAnalysis relatedAnalysis.referenceCode, relatedAnalysis.type

Publication fields

Group Fields
Top-level finalReferenceCode, referenceCode, shortTitle, status, temporaryReferenceCode, type
groups groups.leadingGroup.name, groups.subgroups.name

Leading group fields

Group Fields
Top-level name

Subgroup fields

Group Fields
Top-level name

Trigger fields

Group Fields
Top-level name, year
category category.name