DEVONthink is well known for its powerful search functions. Not only does is support search prefixes, but also extended operators like booleans, parentheses, and wildcards. The syntax of the operators is compatible to DEVONagent and EasyFind, the Finder, Spotlight, common search engines as well as common programming languages such as C, C++, Objective-C, Java, and JavaScript. The complexity of the query is unlimited.

Case-Insensitivity: You are free to use capitalization as you wish, e.g., for proper names, but DEVONthink will ignore case when interpreting the query. However, the operators listed below are case-sensitive, so `age before beauty` is not the same as `age BEFORE beauty`.

White Space Handling: Words linked by non-white separators (e.g., `page-index` or `page_id`) are treated like phrases put into "quotes". Words separated by hyphens are handled like `word1word2 OR "word1 word2"`. Characters separated by dots are considered to be abbreviations and therefore handled like words separated by hyphens, e.g., the term `t.a.t.u` is equal to `"t a t u" OR tatu`.

## Wildcards

To make searching more flexible, you can replace parts of words with wildcards. For example, you can search for plural forms of words without having to type, e.g., "dog" and "dogs". The available wildcards are:

- ?: Matches exactly one character.
- *: Matches none, one, or multiple characters.
- [a-z]: Matches one character of the range `a` through `z`.
- [abc...] or [a|b|c|...]: Matches one character out of the given list of characters.
- [^...]: Matches one character that is not contained in the given list or range.
- ~: The contains operator for matching substrings, essentially equal to a string bounded by wildcards before and after, e.g., `*ink*`.

Note: The wildcards presented here are not full regular expressions.

Example:

Searching a document containing this text: DEVONtechnologies makes great software:
`text:~tech` matches as the tech is contained in one of the words.
`text:tech` does not match as there is no word tech.
`text:tech*` does not match as there is no word beginning with tech.
`text:*tech` does not match as there is no word ending with tech.
`text:*tech*` matches as tech is found in a word with text before and after it. However, unless you have a specific purpose, using the contains (~) operator is more succinct.
Searching a document with the text: He made a cake. She is making cookies. They live in Madeira:
`text: ma[dk]*` matches "made", "making", and "Madeira".
`text: ma[dk]?` matches only "made".
Given a document named 2024-2-14_Big Light Electric:
`name:[0-9]` would only match "2".
`name:[0-9][0-9]` would only match "14"
`name:[0-9]*` would match all the numbers, regardless of length.
`name:[0-9][0-9]*` would match two or more numbers, e.g, "14" and "2024".
`name:19[0-9][0-9]` If you were looking for documents only in the 1900s, this would match, e.g., "1914".
`name:202[0-9] big` would match this document or others from the 2020s, e.g., "2021-3-9_Big Light Electric".

## Boolean Operators

The operators (often called Boolean operators) are words or symbols that establish logical rules for the terms in the search query. If no operator is given, DEVONthink infers AND. The available Boolean operators are:

- term1 AND term2: Contains `term1` AND `term2`
- term1 BUT term2: Contains `term1` AND `term2`
- term1 OR term2: Contains `term1` OR `term2`
- term1 XOR term2: Contains `term1` or `term2`, but not both
- term1 EOR term2: Contains `term1` or `term2`, but not both
- NOT term: Does not contain `term`
- "term1": Contains the string of words `term1`, in exactly this form

Besides the classic Boolean operators, DEVONthink uses a number of operators that usually are found in high-end databases. Use these operators as a replacement for AND and "quotes" to fine tune your query.

- term1 OPT term2: `term1` is required, `term2` is optional. If `term2` is also found, the found document ranks higher in the search results.
- term1 NEAR term2: `term1` occurs 10 words or less before or after `term2`
- term1 NEAR/n term2: `term1` occurs n or less words before or after `term2`
- term1 BEFORE term2: `term1` occurs before `term2`
- term1 BEFORE/n term2: `term1` occurs n or less words before `term2`
- term1 NEXT term2: `term1` occurs right before `term2` (shortcut for `BEFORE/1`)
- term1 NEXT/n term2: `term1` occurs n or less words before `term2` (synonym for `BEFORE/n`)
- term1 AFTER term2: `term1` occurs after `term2`
- term1 AFTER/n term2: `term1` occurs n or less words after `term2`
- ~term1: Contains `term1`, also as part of a word

For convenience, some of these operators can also be abbreviated using commonly used symbols:

- AND: `&`, `&&`, `+`
- OR: `|`, `||`
- XOR: `^`, `^^`
- NOT: `!`, `-`

Operators are evaluated in the following priority: parenthesis > phrase/hyphens > (`NOT`) `BEFORE`/`AFTER`/`NEAR`/`NEXT` > `NOT` > `AND`/`OR`/`XOR`/`EOR`. Terms with same priority but without parenthesis are evaluated from left to right.

## Examples

By using any or all of the operators and rules laid out above you can create complex queries that find the exact information you're looking for. Here are some example queries that show how the operators are used.

Example:

`Devonian Dinosaurs`

This query looks for all documents that contain the words "devonian" and "dinosaurs".

Example:

`(Steve NEAR Jobs) AND iMac BUT NOT MacBook OPT Pro`

This query looks for documents that contain the words "Steve" and "Jobs" no farther ten words away from each other, as well as the word "iMac" (no specific position relative to Steve and Jobs), but not the word "MacBook". The word "Pro" does not need to occur, but if it does, the document is ranked higher in the list of search results.

Example:

`Paracetamol NEAR (~effect OR impact) AND ((side OR second*) NEAR/2 ~effect)`

This query looks for documents containing the word "Paracetamol" near (within 10 words) to words either starting with "effect" (and so also "effects") or "impact". In addition, the document needs to contain the word "side" or any word starting with "second" located within two words range of any word starting with "effect".