]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: add no_fts in struct mail_search_arg
authorBaofeng Wang <baofeng.wang@dovecot.fi>
Wed, 18 May 2016 11:42:21 +0000 (14:42 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 14 Jun 2016 09:20:10 +0000 (12:20 +0300)
When flag is set, FTS will not be performed.

fts plugin: handle no_fts flag

No fts will be performed once flag is set.
Original patch from Timo Sirainen <timo.sirainen@dovecot.fi>

src/lib-storage/mail-search.h
src/plugins/fts-lucene/lucene-wrapper.cc
src/plugins/fts-solr/fts-backend-solr-old.c
src/plugins/fts-solr/fts-backend-solr.c
src/plugins/fts/fts-api.c
src/plugins/fts/fts-storage.c

index d8447faebb65849c07f80d529adfdd8121ac411e..e0a9fd0aa2d37b06749ea0948c21f66bab1e1896 100644 (file)
@@ -101,6 +101,7 @@ struct mail_search_arg {
        unsigned int match_always:1; /* result = 1 always */
        unsigned int nonmatch_always:1; /* result = 0 always */
        unsigned int fuzzy:1; /* use fuzzy matching for this arg */
+       unsigned int no_fts:1; /* do NOT call FTS */
 
        int result; /* -1 = unknown, 0 = unmatched, 1 = matched */
 };
index 89f99a3fcd9312ec3d998e155e30bee39d55f73c..138b70392ea127d2e76cacac19c29ebc4868978b 100644 (file)
@@ -1200,6 +1200,9 @@ lucene_add_definite_query(struct lucene_index *index,
        bool and_args = (flags & FTS_LOOKUP_FLAG_AND_ARGS) != 0;
        Query *q;
 
+       if (arg->no_fts)
+               return false;
+
        if (arg->match_not && !and_args) {
                /* FIXME: we could handle this by doing multiple queries.. */
                return false;
@@ -1266,6 +1269,9 @@ lucene_add_maybe_query(struct lucene_index *index,
        bool and_args = (flags & FTS_LOOKUP_FLAG_AND_ARGS) != 0;
        Query *q = NULL;
 
+       if (arg->no_fts)
+               return false;
+
        if (arg->match_not) {
                /* FIXME: we could handle this by doing multiple queries.. */
                return false;
index c3776441423c8db3ded1381db93d5e78d6b30bbf..5ffbc8ad8248af051f18dcaba4022c3f4567969a 100644 (file)
@@ -630,6 +630,8 @@ static int fts_backend_solr_optimize(struct fts_backend *backend ATTR_UNUSED)
 static bool
 solr_add_definite_query(string_t *str, struct mail_search_arg *arg)
 {
+       if (arg->no_fts)
+               return FALSE;
        switch (arg->type) {
        case SEARCH_TEXT: {
                if (arg->match_not)
index 3c2da2f73ab5f62b2bcf2bdecabe955250edf6b6..5d0d3ac3902c842d1e7e8150c3ff3c0a8f32bb33 100644 (file)
@@ -664,6 +664,8 @@ static void solr_add_str_arg(string_t *str, struct mail_search_arg *arg)
 static bool
 solr_add_definite_query(string_t *str, struct mail_search_arg *arg)
 {
+       if (arg->no_fts)
+               return FALSE;
        switch (arg->type) {
        case SEARCH_TEXT: {
                if (arg->match_not)
@@ -726,6 +728,8 @@ solr_add_definite_query_args(string_t *str, struct mail_search_arg *arg,
 static bool
 solr_add_maybe_query(string_t *str, struct mail_search_arg *arg)
 {
+       if (arg->no_fts)
+               return FALSE;
        switch (arg->type) {
        case SEARCH_HEADER:
        case SEARCH_HEADER_ADDRESS:
index f3a94223ce26b60d96b40d873c99c78afa7ad208..5eec770bc85187860db7ed32997cb2f0c276dd61 100644 (file)
@@ -315,7 +315,9 @@ bool fts_backend_default_can_lookup(struct fts_backend *backend,
                case SEARCH_HEADER_COMPRESS_LWSP:
                case SEARCH_BODY:
                case SEARCH_TEXT:
-                       return TRUE;
+                       if (!args->no_fts)
+                               return TRUE;
+                       break;
                default:
                        break;
                }
index 31b2fe93aec3af3913dd7f2c805207cccb5940cc..b4b500982d1e9c5518e76f4a580d774f53fe96cd 100644 (file)
@@ -154,7 +154,9 @@ static bool fts_want_build_args(const struct mail_search_arg *args)
                        break;
                case SEARCH_BODY:
                case SEARCH_TEXT:
-                       return TRUE;
+                       if (!args->no_fts)
+                               return TRUE;
+                       break;
                default:
                        break;
                }