* Mail document
* -------------
* A mail document is associated with a particular email message file
- * on disk. It is indexed with the following prefixed terms:
+ * on disk. It is indexed with the following prefixed terms which the
+ * database uses to construct threads, etc.:
*
* Single terms of given prefix:
*
*
* thread: The ID of the thread to which the mail belongs
*
+ * replyto: The ID from the In-Reply-To header of the mail (if any).
+ *
* Multiple terms of given prefix:
*
* reference: All message IDs from In-Reply-To and Re ferences
*
* MESSAGE_ID: The unique ID of the mail mess (see "id" above)
*
+ * In addition, terms from the content of the message are added with
+ * "from", "to", "attachment", and "subject" prefixes for use by the
+ * user in searching. But the database doesn't really care itself
+ * about any of these.
+ *
* Timestamp document
* ------------------
* A timestamp document is used by a client of the notmuch library to
* Returns a newly talloc'ed string belonging to 'ctx'.
*
* Returns NULL if there is any error parsing the message-id. */
-char *
+static char *
_parse_message_id (void *ctx, const char *message_id, const char **next)
{
const char *s, *end;
/* Carefully avoid adding any self-referential in-reply-to term. */
in_reply_to_message_id = _parse_message_id (message, in_reply_to, NULL);
- if (strcmp (in_reply_to_message_id,
+ if (in_reply_to_message_id &&
+ strcmp (in_reply_to_message_id,
notmuch_message_get_message_id (message)))
{
_notmuch_message_add_term (message, "replyto",