]> git.cworth.org Git - notmuch-wiki/blobdiff - manpages/notmuch-search-terms-7.mdwn
manpages for 0.24
[notmuch-wiki] / manpages / notmuch-search-terms-7.mdwn
index 5e0ffa9d46a544df2d77f87c892aa344ef618007..f92b7c4e791b7d3b24bdcac5f7f2bbdd2d8006a4 100644 (file)
 <h1>NOTMUCH-SEARCH-TERMS(7)</h1>
 
 <h2>NAME</h2>
-
 <pre>
-       notmuch-search-terms - Syntax for notmuch queries
+       notmuch-search-terms - syntax for notmuch queries
 </pre>
 
 <h2>SYNOPSIS</h2>
-
 <pre>
-       <b>notmuch</b> <b>count</b> [<u>options...</u>]  <<u>search-term</u>>...
-</pre>
+       <b>notmuch</b> <b>count</b> [option ...] &lt;<u>search-term</u>&gt; ...
 
-<pre>
-       <b>notmuch</b> <b>dump</b> [ <<u>filename</u>> ] [--] [ <<u>search-term</u>>...]
-</pre>
+       <b>notmuch</b>  <b>dump</b>  [--format=(batch-tag|sup)]  [--]  [--output=&lt;<u>file</u>&gt;] [--]
+       [&lt;<u>search-term</u>&gt; ...]
 
-<pre>
-       <b>notmuch</b> <b>search</b> [<u>options</u>...] <<u>search-term</u>>...
-</pre>
+       <b>notmuch</b> <b>search</b> [option ...] &lt;<u>search-term</u>&gt; ...
 
-<pre>
-       <b>notmuch</b> <b>show</b> [<u>options</u>...] <<u>search-term</u>>...
-</pre>
+       <b>notmuch</b> <b>show</b> [option ...] &lt;<u>search-term</u>&gt; ...
 
-<pre>
-       <b>notmuch</b> <b>tag</b> +<<u>tag></u>|-<<u>tag</u>> [...] [--] <<u>search-term</u>>...
+       <b>notmuch</b> <b>tag</b> +&lt;<u>tag</u>&gt; ... -&lt;<u>tag</u>&gt; [--] &lt;<u>search-term</u>&gt; ...
 </pre>
 
 <h2>DESCRIPTION</h2>
-
 <pre>
        Several notmuch commands accept a common syntax for search terms.
-</pre>
 
-<pre>
-       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.
-</pre>
 
-<pre>
-       As a special case, a search  string  consisting  of  exactly  a  single
-       asterisk ("*") will match all messages.
-</pre>
+       As  a  special  case,  a  search  string consisting of exactly a single
+       asterisk (&quot;*&quot;) will match all messages.
 
-<pre>
-       In  addition  to free text, the following prefixes can be used to force
-       terms to match against specific portions of an email, (where <brackets>
+       In addition to free text, the following prefixes can be used  to  force
+       terms to match against specific portions of an email, (where &lt;brackets&gt;
        indicate user-supplied values):
-</pre>
 
-<pre>
-            from:<name-or-address>
-</pre>
+       · from:&lt;name-or-address&gt;
 
-<pre>
-            to:<name-or-address>
-</pre>
+       · from:/&lt;regex&gt;/
 
-<pre>
-            subject:<word-or-quoted-phrase>
-</pre>
+       · to:&lt;name-or-address&gt;
 
-<pre>
-            attachment:<word>
-</pre>
+       · subject:&lt;word-or-quoted-phrase&gt;
 
-<pre>
-            tag:<tag> (or is:<tag>)
-</pre>
+       · subject:/&lt;regex&gt;/
 
-<pre>
-            id:<message-id>
-</pre>
+       · attachment:&lt;word&gt;
 
-<pre>
-            thread:<thread-id>
-</pre>
+       · mimetype:&lt;word&gt;
 
-<pre>
-            folder:<directory-path>
-</pre>
+       · tag:&lt;tag&gt; (or is:&lt;tag&gt;)
 
-<pre>
-       The  <b>from:</b> prefix is used to match the name or address of the sender of
+       · id:&lt;message-id&gt;
+
+       · thread:&lt;thread-id&gt;
+
+       · folder:&lt;maildir-folder&gt;
+
+       · path:&lt;directory-path&gt; or path:&lt;directory-path&gt;/**
+
+       · date:&lt;since&gt;..&lt;until&gt;
+
+       · lastmod:&lt;initial-revision&gt;..&lt;final-revision&gt;
+
+       · query:&lt;name&gt;
+
+       · property:&lt;key&gt;=&lt;value&gt;
+
+       The <b>from:</b> prefix is used to match the name or address of the sender  of
        an email message.
-</pre>
 
-<pre>
        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).
-</pre>
 
-<pre>
-       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>.
-</pre>
 
-<pre>
+       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 &apos;from:/bob@.*[.]example[.]com/&apos;
+
        The <b>attachment:</b> prefix can be used to search for specific filenames (or
        extensions) of attachments to email messages.
+
+       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:
+       header of email messages, but without the &apos;&lt;&apos;, &apos;&gt;&apos; 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
+       <b>notmuch</b> <b>search</b>
+
+       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
+       &quot;/**&quot; suffix can be used to match messages in the  specified  directory
+       and  all  its  subdirectories recursively.  <b>path:&quot;&quot;</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 &quot;new&quot; and &quot;cur&quot; subdirectories. The exact syn‐
+       tax  for  maildir  folders  depends  on  your  mail  configuration. For
+       maildir++, <b>folder:&quot;&quot;</b> matches the inbox folder (which  is  the  root  in
+       maildir++),  other folder names always start with &quot;.&quot;, and nested fold‐
+       ers are separated by &quot;.&quot;s, such as <b>folder:.classes.topology</b>. For  &quot;file
+       system&quot; 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:&lt;since&gt;..&lt;until&gt;
+
+       See <b>DATE</b> <b>AND</b> <b>TIME</b> <b>SEARCH</b> below for details on the range expression, and
+       supported syntax for &lt;since&gt; and &lt;until&gt; date and time expressions.
+
+       The time range can also be specified using timestamps with a syntax of:
+
+       &lt;initial-timestamp&gt;..&lt;final-timestamp&gt;
+
+       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
+       &lt;key&gt;=&lt;value&gt; 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> &nbsp; Operators</h3>
 <pre>
-       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>.
+       In addition to individual terms, multiple terms can  be  combined  with
+       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).  The  shorthand  &apos;-&lt;term&gt;&apos;  can  be  used  for  &apos;not
+       &lt;term&gt;&apos; 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> &nbsp; Stemming</h3>
 <pre>
-       For  <b>id:</b>, message ID values are the literal contents of the Message-ID:
-       header of email messages, but without the '<', '>' delimiters.
+       <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 &quot;reduces&quot; the
+       term to the common stem (here &apos;detail&apos;) 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 &quot;John&quot; and not
+       get results for &quot;Johnson&quot;; 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> &nbsp; Wildcards</h3>
 <pre>
-       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>
+       It is possible to use a trailing  &apos;*&apos;  as  a  wildcard.  A  search  for
+       &apos;wildc*&apos; will match &apos;wildcard&apos;, &apos;wildcat&apos;, etc.
 </pre>
 
+<h3> &nbsp; Boolean and Probabilistic Prefixes</h3>
 <pre>
-       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.
+       Xapian  (and  hence  notmuch)  prefixes  are either <b>boolean</b>, supporting
+       exact matches like &quot;<u>tag:inbox</u>&quot;  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&apos;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> &nbsp; Terms and phrases</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
-       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).
+       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.
+
+       · &quot;a list of words&quot;
+
+       · 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 &quot;Free Delicious Pizza&quot; while
+
+          subject:&quot;pizza free&quot;
+
+       will not.
 </pre>
 
+<h2>DATE AND TIME SEARCH</h2>
 <pre>
-       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).
+       notmuch understands a variety of standard and natural ways of  express‐
+       ing dates and times, both in absolute terms (&quot;2012-10-24&quot;) and in rela‐
+       tive terms (&quot;yesterday&quot;). Any number of relative terms can be  combined
+       (&quot;1  hour  25  minutes&quot;) 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>
+
+<h3> &nbsp; The range expression</h3>
+<pre>
+       date:&lt;since&gt;..&lt;until&gt;
+
+       The  above  expression  restricts  the  results  to  only messages from
+       &lt;since&gt; to &lt;until&gt;, based on the Date: header.
+
+       &lt;since&gt; and &lt;until&gt; can describe imprecise times, such as  &quot;yesterday&quot;.
+       In  this  case, &lt;since&gt; is taken as the earliest time it could describe
+       (the beginning of yesterday) and &lt;until&gt; 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:&lt;expr&gt;..! can be used as a shorthand for date:&lt;expr&gt;..&lt;expr&gt;.  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 &apos;_&apos;, or (in most cases) &apos;-&apos;, 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&apos;s  possi‐
+       ble  to specify date:..&lt;until&gt; or date:&lt;since&gt;.. 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>
+
+<h3> &nbsp; Relative date and time</h3>
+<pre>
+       [N|number]         (years|months|weeks|days|hours|hrs|minutes|mins|sec‐
+       onds|secs) [...]
+
+       All refer to past, can be repeated and will be accumulated.
+
+       Units can be abbreviated to any length, with  the  otherwise  ambiguous
+       single m being m for minutes and M for months.
+
+       Number  can  also  be  written  out one, two, ..., ten, dozen, hundred.
+       Additionally, the unit may be preceded by &quot;last&quot; or &quot;this&quot; (e.g., &quot;last
+       week&quot; or &quot;this month&quot;).
+
+       When  combined  with absolute date and time, the relative date and time
+       specification will be relative from the  specified  absolute  date  and
+       time.
+
+       Examples: 5M2d, two weeks
 </pre>
 
+<h3> &nbsp; Supported absolute time formats</h3>
 <pre>
-       Finally, results can be restricted to only messages within a particular
-       time range, (based on the Date: header) with a syntax of:
+       · H[H]:MM[:SS] [(am|a.m.|pm|p.m.)]
+
+       · H[H] (am|a.m.|pm|p.m.)
+
+       · HHMMSS
+
+       · now
+
+       · noon
+
+       · midnight
+
+       · Examples: 17:05, 5pm
 </pre>
 
+<h3> &nbsp; Supported absolute date formats</h3>
 <pre>
-            <initial-timestamp>..<final-timestamp>
+       · YYYY-MM[-DD]
+
+       · DD-MM[-[YY]YY]
+
+       · MM-YYYY
+
+       · M[M]/D[D][/[YY]YY]
+
+       · M[M]/YYYY
+
+       · D[D].M[M][.[YY]YY]
+
+       · D[D][(st|nd|rd|th)] Mon[thname] [YYYY]
+
+       · Mon[thname] D[D][(st|nd|rd|th)] [YYYY]
+
+       · Wee[kday]
+
+       Month names can be abbreviated at three or more characters.
+
+       Weekday names can be abbreviated at three or more characters.
+
+       Examples: 2012-07-31, 31-07-2012, 7/31/2012, August 3
 </pre>
 
+<h3> &nbsp; Time zones</h3>
 <pre>
-       Each timestamp is a number representing the  number  of  seconds  since
-       1970-01-01  00:00:00  UTC.  This  is  not  the most convenient means of
-       expressing date ranges, but until notmuch is fixed  to  accept  a  more
-       convenient  form, one can use the date program to construct timestamps.
-       For example, with the bash shell the following syntax would  specify  a
-       date range to return messages from 2009-10-01 until the current time:
+       · (+|-)HH:MM
+
+       · (+|-)HH[MM]
+
+       Some time zone codes, e.g. UTC, EET.
 </pre>
 
+<h2>XAPIAN FIELD PROCESSORS</h2>
 <pre>
-            $(date +%s -d 2009-10-01)..$(date +%s)
+       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
+
+          % notmuch config get built_with.field_processor
+
+       Currently the following features require field processor support:
+
+       · non-range date queries, e.g. &quot;date:today&quot;
+
+       · named queries e.g. &quot;query:my_special_query&quot;
+
+       · regular expression searches, e.g. &quot;subject:/^\[SPAM\]/&quot;
 </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-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>
-       <b>notmuch</b>(1),  <b>notmuch-config</b>(1), <b>notmuch-count</b>(1), <b>notmuch-dump</b>(1), <b>not-</b>
-       <b>much-hooks</b>(5),  <b>notmuch-new</b>(1),  <b>notmuch-reply</b>(1),  <b>notmuch-restore</b>(1),
-       <b>notmuch-search</b>(1), <b>notmuch-show</b>(1), <b>notmuch-tag</b>(1)
+       2009-2017, Carl Worth and many others
 </pre>
 
-<h1>Notmuch 0.13.2</h1>
+<h2>0.24</h2>