aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2021-08-24 08:17:22 -0700
committerDavid Bremner <david@tethera.net>2021-09-04 17:07:19 -0700
commit90d9c2ad5c459624d17f92d0844e7a7fbb87d7a2 (patch)
tree3c511cbadac8d876127f15102d73f4c2d12a598e /doc
parent48ad0e1ff350a35dd0af6a1892edf27aa5115927 (diff)
lib/parse-sexp: support phrase queries.
Anything that is quoted or not purely word characters is considered a phrase. Phrases are not stemmed, because the stems do not have positional information in the database. It is less efficient to scan the term twice, but it avoids a second pass to add prefixes, so maybe it balances out. In any case, it seems unlikely query parsing is very often a bottleneck.
Diffstat (limited to 'doc')
-rw-r--r--doc/man7/notmuch-sexp-queries.rst32
1 files changed, 27 insertions, 5 deletions
diff --git a/doc/man7/notmuch-sexp-queries.rst b/doc/man7/notmuch-sexp-queries.rst
index 08e97cc3..b763876d 100644
--- a/doc/man7/notmuch-sexp-queries.rst
+++ b/doc/man7/notmuch-sexp-queries.rst
@@ -40,10 +40,12 @@ subqueries.
Match all messages.
*term*
- Match all messages containing *term*, possibly after
- stemming or phase splitting. For discussion of stemming in
- notmuch see :any:`notmuch-search-terms(7)`. Stemming only applies
- to unquoted terms (basic values) in s-expression queries.
+
+ Match all messages containing *term*, possibly after stemming or
+ phrase splitting. For discussion of stemming in notmuch see
+ :any:`notmuch-search-terms(7)`. Stemming only applies to unquoted
+ terms (basic values) in s-expression queries. For information on
+ phrase splitting see :any:`fields`.
``(`` *field* |q1| |q2| ... |qn| ``)``
Restrict the queries |q1| to |qn| to *field*, and combine with *and*
@@ -63,7 +65,7 @@ subqueries.
FIELDS
``````
-*Fields* (also called *prefixes* in notmuch documentation)
+*Fields* [#aka-pref]_
correspond to attributes of mail messages. Some are inherent (and
immutable) like ``subject``, while others ``tag`` and ``property`` are
settable by the user. Each concrete field in
@@ -72,6 +74,13 @@ is discussed further under "Search prefixes" in
:any:`notmuch-search-terms(7)`. The row *user* refers to user defined
fields, described in :any:`notmuch-config(1)`.
+Most fields are either *phrase fields* [#aka-prob]_ (which match
+sequences of words), or *term fields* [#aka-bool]_ (which match exact
+strings). *Phrase splitting* breaks the term (basic value or quoted
+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.
+
.. _field-table:
.. table:: Fields with supported modifiers
@@ -138,10 +147,23 @@ EXAMPLES
``(not Bob Marley)``
Match messages containing neither "Bob" nor "Marley", nor their stems,
+``"quick fox"`` ``quick-fox`` ``quick@fox``
+ Match the *phrase* "quick" followed by "fox" in phrase fields (or
+ outside a field). Match the literal string in a term field.
+
``(subject quick "brown fox")``
Match messages whose subject contains "quick" (anywhere, stemmed) and
the phrase "brown fox".
+NOTES
+=====
+
+.. [#aka-pref] a.k.a. prefixes
+
+.. [#aka-prob] a.k.a. probabilistic prefixes
+
+.. [#aka-bool] a.k.a. boolean prefixes
+
.. |q1| replace:: :math:`q_1`
.. |q2| replace:: :math:`q_2`
.. |qn| replace:: :math:`q_n`