Search syntax for the new AODocs search

Use the search bar to find documents by typing a few words, or get precise by searching a specific field, combining conditions and more. This guide explains everything the search bar understands, with examples.

Note: This article covers the new AODocs search, powered by OpenSearch. If your domain still uses Legacy Search (App Engine), follow Run an advanced search instead. If you're not sure which search is used, contact AODocs Support.

Automatically generated table of contents

AODocs is moving from Legacy Search (App Engine) to a new search powered by OpenSearch. The search syntax in this article only works with the new search. You can't tell from the interface which search is used: to find out, contact AODocs Support.

In a nutshell

I want to… Type this
Find documents containing a word anywhere invoice
Find documents containing all of several words invoice paris
Find an exact phrase "purchase order"
Search one field title:invoice
Match a field exactly Status="In review"
Exclude something invoice -draft or invoice NOT draft
Either/or Country:(France OR Germany)
Compare a number or date Amount>=1000, creation_date<2025-01-01
Search a range Amount:100 to 500
Find documents where a field is blank empty:Reviewer

Searching everything (free text)

Type words without a field name and AODocs looks across the document's text properties (title, text and string fields, people, categories, reference values, URLs, folder names, …) and, if you extend the search to attachment content, the text inside attachments. Table cells are searched too.

This is a scope option users can select: search in metadata only, or extend search to attachment content.

Query What it finds
contract Documents with the word "contract" in any searchable property
contract renewal Documents that contain both words (they can be in different properties). Documents where the words appear together as a phrase rank higher.
"contract renewal" Only documents where the words appear next to each other, in that order
john.doe@example.com Documents linked to that person, in any person property
2025-04-14 Documents with that date in any date property
1250.50 Documents with that number in any number property

Good to know:

  • Punctuation usually splits words, so real-time is searched as real and time.
  • Searching from inside a single library or class does not search library or class names. Searching across libraries does.
  • Cross-library search also uses the new search. It is faster and works whatever the attachment storage solution of your libraries, provided their attachments are indexed by the new search.
  • Boolean (yes/no) and location properties are not part of free-text search. Use a field search for those.

Searching a specific field

Put the field name, an operator and a value together, with no need for spaces around the operator.

fieldName:value
fieldName=value
fieldName:~value
Operator Meaning Example
: Contains: the field contains this word or phrase title:invoice
= Equals: the whole field value is exactly this Status="In review"
:~ Contains, with word variations (English): also finds "dogs" for "dog" comment:~dog
< <= > >= Compare numbers, dates and date-times Amount>=1000
a to b Range, from a to b Amount:100 to 500

If a field name contains spaces, put it in double quotes:

"Total Amount">=1000
"Contract end date"<2026-01-01

Field names must be typed exactly as they are displayed (including capital letters).

Several values for one field

Group them in parentheses after the operator:

Country:(France OR Germany OR Spain)      # any of these
Item:(banana AND apple)                   # both values present (multi-value fields)
Status=("In review" OR Approved)          # equals either

Parentheses groups work with :, = and :~. They do not work with <, >, <= or >=.

Combining conditions

Operator Meaning Example
space or AND Both must match invoice Country:France
OR At least one must match invoice OR receipt
NOT or - Must not match invoice NOT draft, invoice -draft
( ) Group conditions invoice (France OR Germany)

Rules to remember:

  • AND, OR and NOT must be written in capitals. In lowercase they are searched as ordinary words.
  • NOT needs a space after it. The - shortcut is attached to what it negates: -Country:France.
  • Negative numbers are fine: -42 is the number minus 42, not "NOT 42".
  • OR binds more tightly than AND. The order of evaluation is NOT, then OR, then AND (or a space). So a AND b OR c means a AND (b OR c), which is not what most people expect. When in doubt, add parentheses.
  • The word to is only special between two numbers, dates or times (10 to 20). stairway to heaven works as normal text.

Searching by field type

Which operators work depends on the type of the property. The table gives the overview; details follow.

Property type = : :~ < > <= >= to range empty:
Text / String ✅ ✅ ✅ ❌ ❌ ✅
Person ✅ ✅ ✅ (same as :) ❌ ❌ ✅
Date ✅ ✅ ❌ ✅ ✅ ✅
Date & time ✅ ✅ ❌ ✅ ✅ ✅
Time ✅ ✅ ✅ (same as =) ❌ ❌ ✅
Integer ✅ ✅ (same as =) ✅ ✅ ✅ ✅
Decimal ✅ ✅ (same as =) ✅ ✅ ✅ ✅
Yes/No ✅ ✅ (same as =) ❌ ❌ ❌ ✅
URL ✅ (link only) ✅ ✅ ❌ ❌ ✅
Category ✅ ✅ ❌ ❌ ❌ ✅
Reference catalog ✅ ✅ (same as =) ❌ ❌ ❌ ✅
Location use distance(...) ✅

An operator that a property type does not support simply finds nothing.

Text and string properties

title:invoice               # the word "invoice" appears in the title
title:"purchase order"      # those words, next to each other and in this order
title:~invoice              # also matches variations such as "invoices"
Reference="INV-2025-001"    # the whole value is exactly this
  • title:dog matches "dog" and "dog food" but not "dogs". Use :~ for variations.
  • :~ stemming is English only. It is not perfect: ~care finds "care" and "caring" but not "cares" or "cared".
  • With :~ and several words, all the words must be present, in any order.

People

Author:john.doe@example.com      # exact person
Author=john.doe@example.com      # exact email address required
Author:john.doe                  # any address with that user part
Author:example.com               # anyone from the example.com domain

People are matched on their email address only, not on their first or last name. Author:John will not find "John Smith" unless "john" is part of the email.

Dates

Dates are written YYYY-MM-DD, always with two digits for month and day (2025-04-05, not 2025-4-5).

DueDate:2025-04-14                       # on that day
DueDate>=2025-01-01                      # on or after
DueDate<2025-12-31                       # before
DueDate:2025-01-01 to 2025-03-31         # between the two (both included)

Note: a range needs two different dates, with the earlier first. For a single day, use DueDate=2025-04-14.

Dates and times

Date-and-time properties (such as creation_date and last_update_date) accept either a date or a date with time (YYYY-MM-DD HH:MM, 24-hour). Put date-times in quotes.

creation_date:2025-04-14                       # any time during that day
creation_date:"2025-04-14 09:30"               # during that minute
creation_date>=2025-04-01                      # from the start of April 1st
creation_date<"2025-04-14 09:30"               # before that moment
creation_date:2025-04-01 to 2025-04-30         # April 1st through all of April 30th

When you give only a date, the whole day is used:

  • >2025-04-14 means after the end of April 14th.
  • <=2025-04-14 means up to the end of April 14th.

Tip: To search a whole year (or month), use a range: creation_date:2025-01-01 to 2025-12-31. A year or month on its own (creation_date:2025, creation_date:2025-04) is not supported and finds nothing.

Time zones. Times you type are read in your time zone. To be explicit, add a zone to the time:

creation_date>="2025-04-14 09:30Z"               # UTC
creation_date>="2025-04-14 09:30+02:00"          # fixed offset
creation_date>="2025-04-14 09:30[Europe/Paris]"  # named time zone

Named time zones use the standard IANA "TZ identifier" (Region/City). You can find the full list in the "TZ identifier" column of the list of tz database time zones. Time zone names are case-sensitive and use underscores instead of spaces: write America/New_York, not america/new york. If the name is not recognized, the condition finds no results.

Plain date properties (without a time) are not affected by time zones.

Times

MeetingTime:11:50          # any time within 11:50 (11:50:00 to 11:50:59)

Time properties only support an exact-minute match. Comparisons (<, >) and ranges are not available.

Numbers (integer and decimal)

Quantity=12
Amount:157.25
Amount>=1000
Amount:100 to 500.50       # both ends included
Amount:~135.42             # 135.42 up to, but not including, 135.43
Amount:~8                  # 8.0 up to, but not including, 8.1
  • Use a dot as the decimal separator. Commas and thousands separators (10,000) make the query invalid. Write 10000.
  • Integer properties only match whole numbers: Quantity=8 and Quantity=8.0 both find 8, while Quantity=8.5 finds nothing.
  • : on a number is exactly =. Use :~ for the "starts with these decimals" behavior.
  • Write numbers in plain form. Scientific notation (1e3) is not supported.

Yes/No

Completed:true
Approved=false
NOT Archived:true

Matching is not case-sensitive. false also finds documents where the property has no value at all.

URLs

Website:example            # "example" in the link or in the display text
Website:~documentation     # also "documenting", … (display text only)
Website="https://example.com/docs"   # the exact link

= compares the link only, not the display text.

Categories

Region:EMEA                # any document in EMEA, including EMEA/France
Region:France              # every level of a multi-level category is searchable
Region="EMEA/France"       # this exact category value
Region=EMEA                # only documents categorized exactly "EMEA" (not EMEA/France)
Plant:"Paris North"        # quote values containing spaces

You search the category's label, as displayed, not its internal ID. Spelling, spaces, dashes and word order all matter. "Paris North" will not find "North Paris".

Reference catalogs

Supplier="Acme Corp"
Supplier:"Acme Corp"       # same thing

Both operators require the complete reference value, as displayed.

Folders

folder="Finance/2025"      # documents in exactly this folder
folder:Finance             # a folder path containing "Finance"

Locations (geopoint)

Find documents within, or beyond, a radius (in whole meters) of a point:

distance(Location, 48.8584, 2.2945) < 5000     # within 5 km of the Eiffel Tower
distance(Location, 48.8584, 2.2945) > 5000     # more than 5 km away
  • The format is distance(fieldName, latitude, longitude).
  • < and <= mean "within"; > and >= mean "farther than".
  • The distance must be a whole number of meters.
  • No other operator works with distance(...).

Finding blank (or filled) fields

empty:Reviewer             # Reviewer has no value
notEmpty:Reviewer          # Reviewer has a value
NOT empty:Reviewer         # same as notEmpty:Reviewer
empty:"Contract end date"  # quote names with spaces

This works with custom and system properties alike (for instance empty:checkedOutAt finds documents that are not checked out).

empty: only finds documents whose class actually has that property. If you search a whole library, documents from classes without the property are not returned.

Table properties

A table property holds rows and columns. Refer to a column as TableName/ColumnName, using the names as displayed:

Contacts/Email:alice@example.com
Contacts/Age>=18
"Order lines / Unit price">100          # quote names with spaces; spaces around "/" are fine
empty:Contacts/Role                     # a row where Role is blank

Conditions on the same table are matched row by row. If you combine conditions on columns of one table, one single row has to satisfy all of them:

Contacts/Email="alice@example.com" AND Contacts/Role="admin"

only finds documents with a row that is Alice and admin, not a document where Alice is in one row and an admin is another. This also applies to OR and NOT inside the same table.

Conditions on different tables, or on a table and a regular property, are independent: each side just has to match somewhere in the document.

Row-by-row matching only happens when the condition for that table is a self-contained group. In Contacts/Email="alice" AND (Contacts/Role="admin" OR title:foo), the title part prevents it, and the two Contacts conditions can match in different rows.

Table cells are also found by free-text search (except category and reference-catalog cells).

Special characters, quotes and escaping

Some characters mean something to the search bar. To search for them, put the text in double quotes, or put a backslash \ in front of the character.

Character Why Write
space separates words "two words"
: = < > ~ operators \: \= \< \> \~ or in quotes
* ? reserved \* \? or in quotes
, + reserved \, \+ or in quotes
" quote mark \"
\ the escape character itself \\
( ) ! and a lone - grouping / operators in quotes

Examples:

"A - B"                    # a dash between words: use quotes
title:"Q1: results"        # a colon inside a value
title:Q1\:results          # a colon inside a single word, escaped
notes:foo\"bar             # a literal double quote

Inside double quotes everything is taken literally except the closing double quote. A query that can't be understood (for example an unbalanced parenthesis foo ( bar, or a stray :) returns an error rather than results.

System properties

Every document has built-in properties you can search by name. Names are typed in lowercase/underscore form exactly as shown.

Name Type What it is
title Text Document title
documentId ID Document ID
library Text Library name (cross-library searches)
libraryId ID Library ID
class Text Document class name (cross-class and cross-library searches)
classId ID Class ID
templateId ID Template ID
sequenceId Integer Document sequence number
creation_date Date & time When the document was created
last_update_date Date & time When it was last modified
created_by Person Creator
updated_by Person Last editor
state Text Workflow state name
state_id ID Workflow state ID
state_index Integer Position of the workflow state
stateChangeDate Date & time When the state last changed
stateChangeAuthors Person Who changed the state
checkedOutAt Date & time When it was checked out
checked_out_by Person Who checked it out
version Text Version number
version_description Text Version description
version_creation_date Date & time When the current version was created
version_creator Person Who created the current version
folder Folder Parent folder
mime_type_group ID Type of the main file (document, image, …)
numberOfAttachments Integer Number of attachments
fullSizeOfAttachments Integer Total attachment size
incomplete Yes/No Has missing required values
invalidValues Yes/No Has invalid values
hasEvaluationError Yes/No Has a formula error
draft Yes/No Is a draft

"ID" properties (documentId, classId, …) are matched exactly: =, : and :~ all mean "equal to".

Examples

# Unsigned contracts expiring this quarter
class:Contract "Expiry date":2025-07-01 to 2025-09-30 NOT Signed:true

# Invoices over 1,000 from France or Germany, created in 2025
invoice Amount>1000 Country:(France OR Germany) creation_date:2025-01-01 to 2025-12-31

# Anything John edited, excluding drafts
updated_by:john.doe NOT draft:true

# Documents without an owner, in the Legal folder
empty:Owner folder:Legal

# Contracts with no expiry date
class:Contract empty:"Expiry date"

# Offices within 10 km of a point
distance(Location, 51.5072, -0.1276) <= 10000

# Orders with a row for product ABC that is not yet shipped (same row)
Orders/Product="ABC" AND NOT Orders/Status="Shipped"

Troubleshooting

Symptom Likely cause
"Invalid query" / syntax error Unbalanced parentheses, a special character that needs quotes or escaping (see Special characters, quotes and escaping), or a number written with a comma
No results for a field search Field name not typed exactly as displayed; operator not supported by that property type; value not in the expected format (e.g. 2025-4-5)
AND / OR ignored Operators typed in lowercase
a AND b OR c gives surprising results OR is evaluated before AND. Add parentheses: (a AND b) OR c
dog doesn't find "dogs" Use :~ (title:~dog)
Range finds nothing The start must be earlier than the end, and a one-day range must use =
Can't find documents you know exist You only see results for documents you have permission to access
Was this article helpful? 0 out of 0 found this helpful
If you didn’t find what you were looking for, don’t hesitate to leave a comment!
Have more questions? Submit a request

Comments

0 comments

Please sign in to leave a comment.