Provided by: maildir-utils_1.2.0-2build1_amd64 

NAME
mu query language - a language for finding messages in mu databases.
DESCRIPTION
The mu query language is a language used by mu find and mu4e to find messages in mu's Xapian databases.
The language is quite similar to Xapian's default query-parser, but is an independent implementation that
is customized for the mu/mu4e use-case.
In this article, we give a structured but informal overview of the query language and provide examples.
NOTE: t if you use queries on the command-line (say, for mu find), you need to quote any characters that
would otherwise be interpreted by the shell, such as "", ( and ) and whitespace.
TERMS
The basic building blocks of a query are terms; these are just normal words like 'banana' or 'hello', or
words prefixed with a field-name which make them apply to just that field. See mufind for all the
available fields.
Some example queries:
vacation
subject:capybara
maildir:/inbox
Terms without an explicit field-prefix, (like 'vacation' above) are interpreted like:
to:vacation or subject:vacation or body:vacation or ...
The language is case-insensitive for terms and attempts to 'flatten' any diacritics, so angtrom matches
Ångström.
If terms contain whitespace, they need to be quoted:
subject:"hi there"
This is a so-called phrase query, which means that we match against subjects that contain the literal
phrase "hi there".
Remember that you need to escape those quotes when using this from the command-line:
mu find subject:\"hi there\"
LOGICAL OPERATORS
We can combine terms with logical operators -- binary ones: and, or, xor and the unary not, with the
conventional rules for precedence and association, and are case-insensitive.
You can also group things with ( and ), so you can do things like:
(subject:beethoven or subject:bach) and not body:elvis
If you do not explicitly specify an operator between terms, and is implied, so the queries
subject:chip subject:dale
subject:chip AND subject:dale
are equivalent. For readability, we recommend the second version.
Note that a pure not - e.g. searching for not apples is quite a 'heavy' query.
REGULAR EXPRESSIONS AND WILDCARDS
The language supports matching regular expressions that follow ECMAScript; for details, see
http://www.cplusplus.com/reference/regex/ECMAScript/
Regular expressions must be enclosed in //. Some examples:
subject:/h.llo/ # match hallo, hello, ...
subject:/
Note the difference between 'maildir:/foo' and 'maildir:/foo/'; the former matches messages in the '/foo'
maildir, while the latter matches all messages in all maildirs that match 'foo', such as '/foo',
'/bar/cuux/foo', '/fooishbar' etc.
Wildcards are an older mechanism for matching where a term with a rightmost * (and only in that position)
matches any term that starts with the part before the *; they are supported for backward compatibility
and mu translates them to regular expressions internally:
foo*
is equivalent to
/foo.*/
As a note of caution, certain wild-cards and regular expression can take quite a bit longer than 'normal'
queries.
FIELDS
We already saw a number of search fields, such as subject: and body:. Here is the full table, a shortcut
character and a description.
cc,c Cc (carbon-copy) recipient(s)
bcc,h Bcc (blind-carbon-copy) recipient(s)
from,f Message sender
to,t To: recipient(s)
subject,s Message subject
body,b Message body
maildir,m Maildir
msgid,i Message-ID
prio,p Message priority (low, normal or high)
flag,g Message Flags
date,d Date range
size,z Message size range
embed,e Search inside embedded text parts
file,j Attachment filename
mime,y MIME-type of one or more message parts
tag,x Tags for the message
list,v Mailing list (e.g. the List-Id value)
The shortcut character can be used instead of the full name:
f:foo@bar
is the same as
from:foo@bar
For queries that are not one-off, we would recommend the longer name for readabilty.
There are also the special fields contact:, which matches all contact-fields (from, to, cc and bcc), and
recip, which matches all recipient-fields (to, cc and bcc). Hence, for instance,
contact:fnorb@example.com
is equivalent to
(from:fnorb@example.com or to:fnorb@example.com or
cc:from:fnorb@example.com or bcc:fnorb@example.com)
DATE RANGES
The date: field takes a date-range, expressed as the lower and upper bound, separated by ... Either lower
or upper (but not both) can be omitted to create an open range.
Dates are expressed in local time and using ISO-8601 format (YYYY-MM-DD HH:MM:SS); you can leave out the
right part, and mu adds the rest, depending on whether this is the beginning or end of the range (e.g.,
as a lower bound, '2015' would be interpreted as the start of that year; as an upper bound as the end of
the year).
You can use '/' , '.', '-' and 'T' to make dates more human readable.
Some examples:
date:20170505..20170602
date:2017-05-05..2017-06-02
date:..2017-10-01T12:00
date:2015-06-01..
date:2016..2016
You can also use the special 'dates' now and today:
date:20170505..now
date:today..
Finally, you can use relative 'ago' times which express some time before now and consist of a number
followed by a unit, with units s for seconds, M for minutes, h for hours, d for days, w for week, m for
months and y for years. Some examples:
date:3m..
e:2017.01.01..5w
SIZE RANGES
The size or z field allows you to match size ranges -- that is, match messages that have a byte-size
within a certain range. Units (b (for bytes), K (for 1000 bytes) and M (for 1000 * 1000 bytes) are
supported). Some examples:
size:10k..2m
size:10m..
FLAG FIELDS
The flag/g field allows you to match message flags. The following fields are available:
d,draft Draft Message
f,flagged Flagged
n,new New message (in new/ Maildir)
p,passed Passed ('Handled')
r,replied Replied
s,seen Seen
t,trashed Marked for deletion
a,attach Has attachment
z,signed Signed message
x,encrypted Encrypted message
l,list Mailing-list message
Some examples:
flag:attach
flag:replied
g:x
Encrypted messages may be signed as well, but this is only visible after decrypting and thus, invisible
to mu.
PRIORITY FIELD
The message priority field (prio:) has three possible values: low, normal or high. For instance, to match
high-priority messages:
prio:high
MAILDIR
The Maildir field describes the directory path starting after the Maildir-base path, and before the /cur/
or /new/ part. So for example, if there's a message with the file name
~/Maildir/lists/running/cur/1234.213:2,, you could find it (and all the other messages in the same
maildir) with:
maildir:/lists/running
Note the starting '/'. If you want to match mails in the 'root' maildir, you can do with a single '/':
maildir:/
If you have maildirs (or any fields) that include spaces, you need to quote them, ie.
maildir:"/Sent Items"
Note that from the command-line, such queries must be quoted:
mu find 'maildir:"/Sent Items"'
MORE EXAMPLES
Here are some simple examples of mu queries; you can make many more complicated queries using various
logical operators, parentheses and so on, but in the author's experience, it's usually faster to find a
message with a simple query just searching for some words.
Find all messages with both 'bee' and 'bird' (in any field)
bee AND bird
Find all messages with either Frodo or Sam:
Frodo OR Sam
Find all messages with the 'wombat' as subject, and 'capibara' anywhere:
subject:wombat and capibara
Find all messages in the 'Archive' folder from Fred:
from:fred and maildir:/Archive
Find all unread messages with attachments:
flag:attach and flag:unread
Find all messages with PDF-attachments:
mime:application/pdf
Find all messages with attached images:
mime:image/*
CAVEATS
With current Xapian versions, the apostroph character is considered part of a word. Thus, you cannot find
D'Artagnan by searching for Artagnan. So, include the apostroph in search or use a regexp search.
Matching on spaces has changed compared to the old query-parser; this applies e.g. to Maildirs that have
spaces in their name, such as Sent Items. See MAILDIR above.
AUTHOR
Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
SEE ALSO
mu-find(1)
28 December 2017 7 MU(QUERY)