X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=doc%2Fman7%2Fnotmuch-sexp-queries.rst;h=a9fd2f2b6c766956442ccbfb45ca2a241d80ee89;hb=a07ef8abf5248c1128ddc75b8139ae807a88abd9;hp=b763876d3672ddffc51aa8cc810ec67c85ea1503;hpb=90d9c2ad5c459624d17f92d0844e7a7fbb87d7a2;p=notmuch diff --git a/doc/man7/notmuch-sexp-queries.rst b/doc/man7/notmuch-sexp-queries.rst index b763876d..a9fd2f2b 100644 --- a/doc/man7/notmuch-sexp-queries.rst +++ b/doc/man7/notmuch-sexp-queries.rst @@ -36,8 +36,11 @@ An s-expression query is either an atom, the empty list, or a a *field*, *logical operation*, or *modifier*, and 0 or more subqueries. -``*`` ``()`` - Match all messages. +``*`` + "*" matches any non-empty string in the current field. + +``()`` + The empty list matches all messages *term* @@ -81,6 +84,14 @@ string) into words, ignore punctuation. Phrase splitting is applied to terms in phrase (probabilistic) fields. Both phrase splitting and stemming apply only in phrase fields. +Each term or phrase field has an associated combining operator +(``and`` or ``or``) used to combine the queries from each element of +the tail of the list. This is generally ``or`` for those fields where +a message has one such attribute, and ``and`` otherwise. + +Term or phrase fields can contain arbitrarily complex queries made up +from terms, operators, and modifiers, but not other fields. + .. _field-table: .. table:: Fields with supported modifiers @@ -112,7 +123,7 @@ stemming apply only in phrase fields. +------------+-----------+-----------+-----------+-----------+----------+ | mimetype | or | phrase | yes | yes | no | +------------+-----------+-----------+-----------+-----------+----------+ - | path | or | term | yes | yes | yes | + | path | or | term | no | yes | yes | +------------+-----------+-----------+-----------+-----------+----------+ | property | and | term | yes | yes | yes | +------------+-----------+-----------+-----------+-----------+----------+ @@ -130,6 +141,29 @@ stemming apply only in phrase fields. MODIFIERS ````````` +*Modifiers* refer to any prefixes (first elements of compound queries) +that are neither operators nor fields. + +``(infix`` *atom* ``)`` + Interpret *atom* as an infix notmuch query (see + :any:`notmuch-search-terms(7)`). Not supported inside fields. + +``(matching`` |q1| |q2| ... |qn| ``)`` ``(of`` |q1| |q2| ... |qn| ``)`` + Match all messages have the same values of the current field as + those matching all of |q1| ... |qn|. Supported in most term [#not-path]_ or + phrase fields. Most commonly used in the ``thread`` field. + +``(regex`` *atom* ``)`` ``(rx`` *atom* ``)`` + Interpret *atom* as a POSIX.2 regular expression (see + :manpage:`regex(7)`). This applies in term fields and a subset [#not-phrase]_ of + phrase fields (see :any:`field-table`). + +``(starts-with`` *subword* ``)`` + Matches any term starting with *subword*. This applies in either + phrase or term :any:`fields `, or outside of fields [#not-body]_. Note that + a ``starts-with`` query cannot be part of a phrase. The + atom ``*`` is a synonym for ``(starts-with "")``. + EXAMPLES ======== @@ -151,10 +185,49 @@ EXAMPLES Match the *phrase* "quick" followed by "fox" in phrase fields (or outside a field). Match the literal string in a term field. +``(folder (of (id 1234@invalid)))`` + Match any message in the same folder as the one with Message-Id "1234@invalid" + +``(id 1234@invalid blah@test)`` + Matches Message-Id "1234@invalid" *or* Message-Id "blah@test" + +``(and (infix "date:2009-11-18..2009-11-18") (tag unread))`` + Match messages in the given date range with tag unread. + +``(starts-with prelim)`` + Match any words starting with "prelim". + ``(subject quick "brown fox")`` Match messages whose subject contains "quick" (anywhere, stemmed) and the phrase "brown fox". +``(subject (starts-with prelim))`` + Matches any word starting with "prelim", inside a message subject. + +``(subject (starts-wih quick) "brown fox")`` + Match messages whose subject contains "quick brown fox", but also + "brown fox quicksand". + +``(thread (of (id 1234@invalid)))`` + Match any message in the same thread as the one with Message-Id "1234@invalid" + +``(thread (matching (from bob@example.com) (to bob@example.com)))`` + Match any (messages in) a thread containing a message from + "bob@example.com" and a (possibly distinct) message to "bob at + example.com") + +``(to (or bob@example.com mallory@example.org))`` ``(or (to bob@example.com) (to mallory@example.org))`` + Match in the "To" or "Cc" headers, "bob@example.com", + "mallory@example.org", and also "bob@example.com.au" since it + contains the adjacent triple "bob", "example", "com". + +``(not (to *))`` + Match messages with an empty or invalid 'To' and 'Cc' field. + +``(List *)`` + Match messages with a non-empty List-Id header, assuming + configuration ``index.header.List=List-Id`` + NOTES ===== @@ -164,6 +237,16 @@ NOTES .. [#aka-bool] a.k.a. boolean prefixes +.. [#not-phrase] Due to the implemention of phrase fields in Xapian, + regex queries could only match individual words. + +.. [#not-body] Due the the way ``body`` is implemented in notmuch, + this modifier is not supported in the ``body`` field. + +.. [#not-path] Due to the way recursive ``path`` queries are implemented + in notmuch, this modifier is not supported in the + ``path`` field. + .. |q1| replace:: :math:`q_1` .. |q2| replace:: :math:`q_2` .. |qn| replace:: :math:`q_n`