From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 3F6936DE0AAB for ; Mon, 18 Feb 2019 03:56:33 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.007 X-Spam-Level: X-Spam-Status: No, score=-0.007 tagged_above=-999 required=5 tests=[AWL=-0.006, SPF_PASS=-0.001] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id q_0G3xys3J0o for ; Mon, 18 Feb 2019 03:56:32 -0800 (PST) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by arlo.cworth.org (Postfix) with ESMTPS id 031566DE0A89 for ; Mon, 18 Feb 2019 03:56:31 -0800 (PST) Received: from remotemail by fethera.tethera.net with local (Exim 4.89) (envelope-from ) id 1gvhXB-0002Ez-2A; Mon, 18 Feb 2019 06:56:29 -0500 Received: (nullmailer pid 31520 invoked by uid 1000); Mon, 18 Feb 2019 11:56:25 -0000 From: David Bremner To: notmuch@notmuchmail.org Subject: [PATCH] WIP: add searching by body: Date: Mon, 18 Feb 2019 07:56:22 -0400 Message-Id: <20190218115622.31466-1-david@tethera.net> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Feb 2019 11:56:33 -0000 --- this basically impliments a suggestion of Olly Betts on IRC. I don't _think_ it requires indexing, since the new queries work on the old database. In principle this should result in smaller indexes and somewhat faster indexing, as it doesn't add terms twice anymore. lib/database.cc | 6 ++++++ lib/message.cc | 10 +++++----- test/T730-body.sh | 28 ++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100755 test/T730-body.sh diff --git a/lib/database.cc b/lib/database.cc index 9cf8062c..27c2d042 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -259,6 +259,8 @@ prefix_t prefix_table[] = { { "directory", "XDIRECTORY", NOTMUCH_FIELD_NO_FLAGS }, { "file-direntry", "XFDIRENTRY", NOTMUCH_FIELD_NO_FLAGS }, { "directory-direntry", "XDDIRENTRY", NOTMUCH_FIELD_NO_FLAGS }, + { "body", "", NOTMUCH_FIELD_EXTERNAL | + NOTMUCH_FIELD_PROBABILISTIC}, { "thread", "G", NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, { "tag", "K", NOTMUCH_FIELD_EXTERNAL | @@ -302,6 +304,8 @@ prefix_t prefix_table[] = { static void _setup_query_field_default (const prefix_t *prefix, notmuch_database_t *notmuch) { + if (prefix->prefix) + notmuch->query_parser->add_prefix("",prefix->prefix); if (prefix->flags & NOTMUCH_FIELD_PROBABILISTIC) notmuch->query_parser->add_prefix (prefix->name, prefix->prefix); else @@ -326,6 +330,8 @@ _setup_query_field (const prefix_t *prefix, notmuch_database_t *notmuch) *notmuch->query_parser, notmuch))->release (); /* we treat all field-processor fields as boolean in order to get the raw input */ + if (prefix->prefix) + notmuch->query_parser->add_prefix("",prefix->prefix); notmuch->query_parser->add_boolean_prefix (prefix->name, fp); } else { _setup_query_field_default (prefix, notmuch); diff --git a/lib/message.cc b/lib/message.cc index 6f2f6345..64349f83 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -1443,13 +1443,13 @@ _notmuch_message_gen_terms (notmuch_message_t *message, message->termpos = term_gen->get_termpos () + 100; _notmuch_message_invalidate_metadata (message, prefix_name); + } else { + term_gen->set_termpos (message->termpos); + term_gen->index_text (text); + /* Create a term gap, as above. */ + message->termpos = term_gen->get_termpos () + 100; } - term_gen->set_termpos (message->termpos); - term_gen->index_text (text); - /* Create a term gap, as above. */ - message->termpos = term_gen->get_termpos () + 100; - return NOTMUCH_PRIVATE_STATUS_SUCCESS; } diff --git a/test/T730-body.sh b/test/T730-body.sh new file mode 100755 index 00000000..8318f9af --- /dev/null +++ b/test/T730-body.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +test_description='search body' +. $(dirname "$0")/test-lib.sh || exit 1 + +add_message "[body]=thebody-1" "[subject]=subject-1" + +test_begin_subtest 'search with body: prefix' +notmuch search body:thebody | notmuch_search_sanitize > OUTPUT +cat < EXPECTED +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; subject-1 (inbox unread) +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest 'search without body: prefix' +notmuch search thebody | notmuch_search_sanitize > OUTPUT +cat < EXPECTED +thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; subject-1 (inbox unread) +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest 'search with body: prefix for term only in subject' +notmuch search body:subject | notmuch_search_sanitize > OUTPUT +cat < EXPECTED +EOF +test_expect_equal_file EXPECTED OUTPUT + + +test_done -- 2.20.1