-<h1>NOTMUCH-SEARCH-TERMS(7)Miscellaneous Information ManualNOTMUCH-SEARCH-TERMS(7)</h1>
+<h1>NOTMUCH-SEARCH-TERMS(7)</h1>
<h2>NAME</h2>
<pre>
<h2>SYNOPSIS</h2>
<pre>
- <b>notmuch</b> <b>count</b> [<u>options...</u>] <<u>search-term</u>>...
+ <b>notmuch</b> <b>count</b> [option ...] <<u>search-term</u>> ...
- <b>notmuch</b> <b>dump</b> [ <<u>filename</u>> ] [--] [ <<u>search-term</u>>...]
+ <b>notmuch</b> <b>dump</b> [--format=(batch-tag|sup)] [--] [--output=<<u>file</u>>] [--]
+ [<<u>search-term</u>> ...]
- <b>notmuch</b> <b>search</b> [<u>options</u>...] <<u>search-term</u>>...
+ <b>notmuch</b> <b>search</b> [option ...] <<u>search-term</u>> ...
- <b>notmuch</b> <b>show</b> [<u>options</u>...] <<u>search-term</u>>...
+ <b>notmuch</b> <b>show</b> [option ...] <<u>search-term</u>> ...
- <b>notmuch</b> <b>tag</b> +<<u>tag</u>>|-<<u>tag</u>> [...] [--] <<u>search-term</u>>...
+ <b>notmuch</b> <b>tag</b> +<<u>tag</u>> ... -<<u>tag</u>> [--] <<u>search-term</u>> ...
</pre>
<h2>DESCRIPTION</h2>
<pre>
Several notmuch commands accept a common syntax for search terms.
- The search terms can consist of free-form text (and quoted phrases)
- which will match all messages that contain all of the given
- terms/phrases in the body, the subject, or any of the sender or recipi-
+ The search terms can consist of free-form text (and quoted phrases)
+ which will match all messages that contain all of the given
+ terms/phrases in the body, the subject, or any of the sender or recipi‐
ent headers.
- As a special case, a search string consisting of exactly a single
+ As a special case, a search string consisting of exactly a single
asterisk ("*") will match all messages.
- In addition to free text, the following prefixes can be used to force
+ In addition to free text, the following prefixes can be used to force
terms to match against specific portions of an email, (where <brackets>
indicate user-supplied values):
- from:<name-or-address>
+ · from:<name-or-address>
- to:<name-or-address>
+ · from:/<regex>/
- subject:<word-or-quoted-phrase>
+ · to:<name-or-address>
- attachment:<word>
+ · subject:<word-or-quoted-phrase>
- tag:<tag> (or is:<tag>)
+ · subject:/<regex>/
- id:<message-id>
+ · attachment:<word>
- thread:<thread-id>
+ · mimetype:<word>
- folder:<directory-path>
+ · tag:<tag> (or is:<tag>)
- date:<since>..<until>
+ · id:<message-id>
- The <b>from:</b> prefix is used to match the name or address of the sender of
+ · thread:<thread-id>
+
+ · folder:<maildir-folder>
+
+ · path:<directory-path> or path:<directory-path>/**
+
+ · date:<since>..<until>
+
+ · lastmod:<initial-revision>..<final-revision>
+
+ · query:<name>
+
+ · property:<key>=<value>
+
+ The <b>from:</b> prefix is used to match the name or address of the sender of
an email message.
The <b>to:</b> prefix is used to match the names or addresses of any recipient
of an email message, (whether To, Cc, or Bcc).
- Any term prefixed with <b>subject:</b> will match only text from the subject
- of an email. Searching for a phrase in the subject is supported by
+ Any term prefixed with <b>subject:</b> will match only text from the subject
+ of an email. Searching for a phrase in the subject is supported by
including quotation marks around the phrase, immediately following <b>sub-</b>
<b>ject:</b>.
+ If notmuch is built with <b>Xapian</b> <b>Field</b> <b>Processors</b> (see below) the <b>from:</b>
+ and <b>subject</b> prefix can be also used to restrict the results to those
+ whose from/subject value matches a regular expression (see <b>regex</b>(7))
+ delimited with //.
+
+ notmuch search 'from:/bob@.*[.]example[.]com/'
+
The <b>attachment:</b> prefix can be used to search for specific filenames (or
extensions) of attachments to email messages.
- For <b>tag:</b> and <b>is:</b> valid tag values include <b>inbox</b> and <b>unread</b> by default
- for new messages added by <b>notmuch</b> <b>new</b> as well as any other tag values
+ The <b>mimetype:</b> prefix will be used to match text from the content-types
+ of MIME parts within email messages (as specified by the sender).
+
+ For <b>tag:</b> and <b>is:</b> valid tag values include <b>inbox</b> and <b>unread</b> by default
+ for new messages added by <b>notmuch</b> <b>new</b> as well as any other tag values
added manually with <b>notmuch</b> <b>tag</b>.
- For <b>id:</b>, message ID values are the literal contents of the Message-ID:
+ For <b>id:</b>, message ID values are the literal contents of the Message-ID:
header of email messages, but without the '<', '>' delimiters.
- The <b>thread:</b> prefix can be used with the thread ID values that are gen-
- erated internally by notmuch (and do not appear in email messages).
- These thread ID values can be seen in the first column of output from
+ The <b>thread:</b> prefix can be used with the thread ID values that are gen‐
+ erated internally by notmuch (and do not appear in email messages).
+ These thread ID values can be seen in the first column of output from
<b>notmuch</b> <b>search</b>
- The <b>folder:</b> prefix can be used to search for email message files that
- are contained within particular directories within the mail store. Only
- the directory components below the top-level mail database path are
- available to be searched.
-
- The <b>date:</b> prefix can be used to restrict the results to only messages
+ The <b>path:</b> prefix searches for email messages that are in particular
+ directories within the mail store. The directory must be specified rel‐
+ ative to the top-level maildir (and without the leading slash). By
+ default, <b>path:</b> matches messages in the specified directory only. The
+ "/**" suffix can be used to match messages in the specified directory
+ and all its subdirectories recursively. <b>path:""</b> matches messages in
+ the root of the mail store and, likewise, <b>path:**</b> matches all messages.
+
+ The <b>folder:</b> prefix searches for email messages by maildir or MH folder.
+ For MH-style folders, this is equivalent to <b>path:</b>. For maildir, this
+ includes messages in the "new" and "cur" subdirectories. The exact syn‐
+ tax for maildir folders depends on your mail configuration. For
+ maildir++, <b>folder:""</b> matches the inbox folder (which is the root in
+ maildir++), other folder names always start with ".", and nested fold‐
+ ers are separated by "."s, such as <b>folder:.classes.topology</b>. For "file
+ system" maildir, the inbox is typically <b>folder:INBOX</b> and nested folders
+ are separated by slashes, such as <b>folder:classes/topology</b>.
+
+ Both <b>path:</b> and <b>folder:</b> will find a message if <u>any</u> copy of that message
+ is in the specific directory/folder.
+
+ The <b>date:</b> prefix can be used to restrict the results to only messages
within a particular time range (based on the Date: header) with a range
syntax of:
- date:<since>..<until>
+ date:<since>..<until>
See <b>DATE</b> <b>AND</b> <b>TIME</b> <b>SEARCH</b> below for details on the range expression, and
supported syntax for <since> and <until> date and time expressions.
The time range can also be specified using timestamps with a syntax of:
- <initial-timestamp>..<final-timestamp>
+ <initial-timestamp>..<final-timestamp>
- Each timestamp is a number representing the number of seconds since
+ Each timestamp is a number representing the number of seconds since
1970-01-01 00:00:00 UTC.
+ The <b>lastmod:</b> prefix can be used to restrict the result by the database
+ revision number of when messages were last modified (tags were
+ added/removed or filenames changed). This is usually used in conjunc‐
+ tion with the <b>--uuid</b> argument to <b>notmuch</b> <b>search</b> to find messages that
+ have changed since an earlier query.
+
+ The <b>query:</b> prefix allows queries to refer to previously saved queries
+ added with <a href='../notmuch-config-1/'>notmuch-config</a>(1). Named queries are only available if not‐
+ much is built with <b>Xapian</b> <b>Field</b> <b>Processors</b> (see below).
+
+ The <b>property:</b> prefix searches for messages with a particular
+ <key>=<value> property pair. Properties are used internally by notmuch
+ (and extensions) to add metadata to messages. A given key can be
+ present on a given message with several different values.
+</pre>
+
+<h3> Operators</h3>
+<pre>
In addition to individual terms, multiple terms can be combined with
- Boolean operators ( <b>and</b>, <b>or</b>, <b>not</b> , etc.). Each term in the query will
+ Boolean operators (<b>and</b>, <b>or</b>, <b>not</b>, and <b>xor</b>). Each term in the query will
be implicitly connected by a logical AND if no explicit operator is
- provided, (except that terms with a common prefix will be implicitly
- combined with OR until we get Xapian defect #402 fixed).
-
- Parentheses can also be used to control the combination of the Boolean
- operators, but will have to be protected from interpretation by the
- shell, (such as by putting quotation marks around any parenthesized
+ provided (except that terms with a common prefix will be implicitly
+ combined with OR). The shorthand '-<term>' can be used for 'not
+ <term>' but unfortunately this does not work at the start of an expres‐
+ sion. Parentheses can also be used to control the combination of the
+ Boolean operators, but will have to be protected from interpretation by
+ the shell, (such as by putting quotation marks around any parenthesized
expression).
+
+ In addition to the standard boolean operators, Xapian provides several
+ operators specific to text searching.
+
+ notmuch search term1 NEAR term2
+
+ will return results where term1 is within 10 words of term2. The
+ threshold can be set like this:
+
+ notmuch search term1 NEAR/2 term2
+
+ The search
+
+ notmuch search term1 ADJ term2
+
+ will return results where term1 is within 10 words of term2, but in the
+ same order as in the query. The threshold can be set the same as with
+ NEAR:
+
+ notmuch search term1 ADJ/7 term2
+</pre>
+
+<h3> Stemming</h3>
+<pre>
+ <b>Stemming</b> in notmuch means that these searches
+
+ notmuch search detailed
+ notmuch search details
+ notmuch search detail
+
+ will all return identical results, because Xapian first "reduces" the
+ term to the common stem (here 'detail') and then performs the search.
+
+ There are two ways to turn this off: a search for a capitalized word
+ will be performed unstemmed, so that one can search for "John" and not
+ get results for "Johnson"; phrase searches are also unstemmed (see
+ below for details). Stemming is currently only supported for English.
+ Searches for words in other languages will be performed unstemmed.
+</pre>
+
+<h3> Wildcards</h3>
+<pre>
+ It is possible to use a trailing '*' as a wildcard. A search for
+ 'wildc*' will match 'wildcard', 'wildcat', etc.
+</pre>
+
+<h3> Boolean and Probabilistic Prefixes</h3>
+<pre>
+ Xapian (and hence notmuch) prefixes are either <b>boolean</b>, supporting
+ exact matches like "<u>tag:inbox</u>" or <b>probabilistic</b>, supporting a more
+ flexible <b>term</b> based searching. Certain <b>special</b> prefixes are processed
+ by notmuch in a way not stricly fitting either of Xapian's built in
+ styles. The prefixes currently supported by notmuch are as follows.
+
+ <b>Boolean</b>
+ <b>tag:</b>, <b>id:</b>, <b>thread:</b>, <b>folder:</b>, <b>path:</b>, <b>property:</b>
+
+ <b>Probabilistic</b>
+ <b>to:</b>, <b>attachment:</b>, <b>mimetype:</b>
+
+ <b>Special</b>
+ <b>from:</b>, <b>query:</b>, <b>subject:</b>
+</pre>
+
+<h3> Terms and phrases</h3>
+<pre>
+ In general Xapian distinguishes between lists of terms and <b>phrases</b>.
+ Phrases are indicated by double quotes (but beware you probably need to
+ protect those from your shell) and insist that those unstemmed words
+ occur in that order. One useful, but initially surprising feature is
+ that the following are equivalant ways to write the same phrase.
+
+ · "a list of words"
+
+ · a-list-of-words
+
+ · a/list/of/words
+
+ · a.list.of.words
+
+ Both parenthesised lists of terms and quoted phrases are ok with proba‐
+ bilisitic prefixes such as <b>to:</b>, <b>from:</b>, and <b>subject:</b>. In particular
+
+ subject:(pizza free)
+
+ is equivalent to
+
+ subject:pizza and subject:free
+
+ Both of these will match a subject "Free Delicious Pizza" while
+
+ subject:"pizza free"
+
+ will not.
</pre>
<h2>DATE AND TIME SEARCH</h2>
<pre>
- notmuch understands a variety of standard and natural ways of express-
- ing dates and times, both in absolute terms ("2012-10-24") and in rela-
- tive terms ("yesterday"). Any number of relative terms can be combined
- ("1 hour 25 minutes") and an absolute date/time can be combined with
- relative terms to further adjust it. A non-exhaustive description of
+ notmuch understands a variety of standard and natural ways of express‐
+ ing dates and times, both in absolute terms ("2012-10-24") and in rela‐
+ tive terms ("yesterday"). Any number of relative terms can be combined
+ ("1 hour 25 minutes") and an absolute date/time can be combined with
+ relative terms to further adjust it. A non-exhaustive description of
the syntax supported for absolute and relative terms is given below.
+</pre>
- <b>The</b> <b>range</b> <b>expression</b>
+<h3> The range expression</h3>
+<pre>
+ date:<since>..<until>
+
+ The above expression restricts the results to only messages from
+ <since> to <until>, based on the Date: header.
+
+ <since> and <until> can describe imprecise times, such as "yesterday".
+ In this case, <since> is taken as the earliest time it could describe
+ (the beginning of yesterday) and <until> is taken as the latest time it
+ could describe (the end of yesterday). Similarly, date:january..febru‐
+ ary matches from the beginning of January to the end of February.
+
+ date:<expr>..! can be used as a shorthand for date:<expr>..<expr>. The
+ expansion takes place before interpretation, and thus, for example,
+ date:monday..! matches from the beginning of Monday until the end of
+ Monday. With <b>Xapian</b> <b>Field</b> <b>Processor</b> support (see below), non-range
+ date queries such as date:yesterday will work, but otherwise will give
+ unexpected results; if in doubt use date:yesterday..!
+
+ Currently, we do not support spaces in range expressions. You can
+ replace the spaces with '_', or (in most cases) '-', or (in some cases)
+ leave the spaces out altogether. Examples in this man page use spaces
+ for clarity.
+
+ Open-ended ranges are supported (since Xapian 1.2.1), i.e. it's possi‐
+ ble to specify date:..<until> or date:<since>.. to not limit the start
+ or end time, respectively. Pre-1.2.1 Xapian does not report an error on
+ open ended ranges, but it does not work as expected either.
+</pre>
- date:<since>..<until>
+<h3> Relative date and time</h3>
+<pre>
+ [N|number] (years|months|weeks|days|hours|hrs|minutes|mins|sec‐
+ onds|secs) [...]
- The above expression restricts the results to only messages
- from <since> to <until>, based on the Date: header.
+ All refer to past, can be repeated and will be accumulated.
- <since> and <until> can describe imprecise times, such as "yes-
- terday". In this case, <since> is taken as the earliest time
- it could describe (the beginning of yesterday) and <until> is
- taken as the latest time it could describe (the end of yester-
- day). Similarly, date:january..february matches from the begin-
- ning of January to the end of February.
+ Units can be abbreviated to any length, with the otherwise ambiguous
+ single m being m for minutes and M for months.
- Currently, we do not support spaces in range expressions. You
- can replace the spaces with '_', or (in most cases) '-', or (in
- some cases) leave the spaces out altogether. Examples in this
- man page use spaces for clarity.
+ Number can also be written out one, two, ..., ten, dozen, hundred.
+ Additionally, the unit may be preceded by "last" or "this" (e.g., "last
+ week" or "this month").
- Open-ended ranges are supported (since Xapian 1.2.1), i.e. it's
- possible to specify date:..<until> or date:<since>.. to not
- limit the start or end time, respectively. Pre-1.2.1 Xapian
- does not report an error on open ended ranges, but it does not
- work as expected either.
+ When combined with absolute date and time, the relative date and time
+ specification will be relative from the specified absolute date and
+ time.
- Entering date:expr without ".." (for example date:yesterday)
- won't work, as it's not interpreted as a range expression at
- all. You can achieve the expected result by duplicating the
- expr both sides of ".." (for example date:yesterday..yester-
- day).
+ Examples: 5M2d, two weeks
+</pre>
- <b>Relative</b> <b>date</b> <b>and</b> <b>time</b>
- [N|number] (years|months|weeks|days|hours|hrs|minutes|mins|sec-
- onds|secs) [...]
+<h3> Supported absolute time formats</h3>
+<pre>
+ · H[H]:MM[:SS] [(am|a.m.|pm|p.m.)]
- All refer to past, can be repeated and will be accumulated.
+ · H[H] (am|a.m.|pm|p.m.)
- Units can be abbreviated to any length, with the otherwise
- ambiguous single m being m for minutes and M for months.
+ · HHMMSS
- Number can also be written out one, two, ..., ten, dozen, hun-
- dred. Additionally, the unit may be preceded by "last" or
- "this" (e.g., "last week" or "this month").
+ · now
- When combined with absolute date and time, the relative date
- and time specification will be relative from the specified
- absolute date and time.
+ · noon
- Examples: 5M2d, two weeks
+ · midnight
- <b>Supported</b> <b>absolute</b> <b>time</b> <b>formats</b>
- H[H]:MM[:SS] [(am|a.m.|pm|p.m.)]
+ · Examples: 17:05, 5pm
+</pre>
- H[H] (am|a.m.|pm|p.m.)
+<h3> Supported absolute date formats</h3>
+<pre>
+ · YYYY-MM[-DD]
- HHMMSS
+ · DD-MM[-[YY]YY]
- now
+ · MM-YYYY
- noon
+ · M[M]/D[D][/[YY]YY]
- midnight
+ · M[M]/YYYY
- Examples: 17:05, 5pm
+ · D[D].M[M][.[YY]YY]
- <b>Supported</b> <b>absolute</b> <b>date</b> <b>formats</b>
- YYYY-MM[-DD]
+ · D[D][(st|nd|rd|th)] Mon[thname] [YYYY]
- DD-MM[-[YY]YY]
+ · Mon[thname] D[D][(st|nd|rd|th)] [YYYY]
- MM-YYYY
+ · Wee[kday]
- M[M]/D[D][/[YY]YY]
+ Month names can be abbreviated at three or more characters.
- M[M]/YYYY
+ Weekday names can be abbreviated at three or more characters.
- D[D].M[M][.[YY]YY]
+ Examples: 2012-07-31, 31-07-2012, 7/31/2012, August 3
+</pre>
- D[D][(st|nd|rd|th)] Mon[thname] [YYYY]
+<h3> Time zones</h3>
+<pre>
+ · (+|-)HH:MM
- Mon[thname] D[D][(st|nd|rd|th)] [YYYY]
+ · (+|-)HH[MM]
- Wee[kday]
+ Some time zone codes, e.g. UTC, EET.
+</pre>
- Month names can be abbreviated at three or more characters.
+<h2>XAPIAN FIELD PROCESSORS</h2>
+<pre>
+ Certain optional features of the notmuch query processor rely on the
+ presence of the Xapian field processor API. You can determine if your
+ notmuch was built against a sufficiently recent version of Xapian by
+ running
- Weekday names can be abbreviated at three or more characters.
+ % notmuch config get built_with.field_processor
- Examples: 2012-07-31, 31-07-2012, 7/31/2012, August 3
+ Currently the following features require field processor support:
- <b>Time</b> <b>zones</b>
- (+|-)HH:MM
+ · non-range date queries, e.g. "date:today"
- (+|-)HH[MM]
+ · named queries e.g. "query:my_special_query"
- Some time zone codes, e.g. UTC, EET.
+ · regular expression searches, e.g. "subject:/^\[SPAM\]/"
</pre>
<h2>SEE ALSO</h2>
<pre>
- <a href='../notmuch-1/'>notmuch</a>(1), <a href='../notmuch-config-1/'>notmuch-config</a>(1), <a href='../notmuch-count-1/'>notmuch-count</a>(1), <a href='../notmuch-dump-1/'>notmuch-dump</a>(1), <a href='../notmuch-hooks-5/'>not-</a>
- <a href='../notmuch-hooks-5/'>much-hooks</a>(5), <a href='../notmuch-new-1/'>notmuch-new</a>(1), <a href='../notmuch-reply-1/'>notmuch-reply</a>(1), <a href='../notmuch-restore-1/'>notmuch-restore</a>(1),
- <a href='../notmuch-search-1/'>notmuch-search</a>(1), <a href='../notmuch-show-1/'>notmuch-show</a>(1), <a href='../notmuch-tag-1/'>notmuch-tag</a>(1)
+ <a href='../notmuch-1/'>notmuch</a>(1), <a href='../notmuch-config-1/'>notmuch-config</a>(1), <a href='../notmuch-count-1/'>notmuch-count</a>(1), <a href='../notmuch-dump-1/'>notmuch-dump</a>(1), <a href='../notmuch-hooks-5/'>not‐</a>
+ <a href='../notmuch-hooks-5/'>much-hooks</a>(5), <a href='../notmuch-insert-1/'>notmuch-insert</a>(1), <a href='../notmuch-new-1/'>notmuch-new</a>(1), <a href='../notmuch-reply-1/'>notmuch-reply</a>(1),
+ <a href='../notmuch-restore-1/'>notmuch-restore</a>(1), <a href='../notmuch-search-1/'>notmuch-search</a>(1), <a href='../notmuch-show-1/'>notmuch-show</a>(1), <a href='../notmuch-tag-1/'>notmuch-tag</a>(1)
+</pre>
+
+<h2>AUTHOR</h2>
+<pre>
+ Carl Worth and many others
+</pre>
+
+<h2>COPYRIGHT</h2>
+<pre>
+ 2009-2017, Carl Worth and many others
</pre>
-<h2>Notmuch 0.15.2</h2>
+<h2>0.24</h2>