From: Baofeng Wang Date: Wed, 18 May 2016 11:42:21 +0000 (+0300) Subject: lib-storage: add no_fts in struct mail_search_arg X-Git-Tag: 2.2.25.rc1~197 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fd3cdfde33d7bd01909de1754e0acfd6aa36c73c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: add no_fts in struct mail_search_arg 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 --- diff --git a/src/lib-storage/mail-search.h b/src/lib-storage/mail-search.h index d8447faebb..e0a9fd0aa2 100644 --- a/src/lib-storage/mail-search.h +++ b/src/lib-storage/mail-search.h @@ -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 */ }; diff --git a/src/plugins/fts-lucene/lucene-wrapper.cc b/src/plugins/fts-lucene/lucene-wrapper.cc index 89f99a3fcd..138b70392e 100644 --- a/src/plugins/fts-lucene/lucene-wrapper.cc +++ b/src/plugins/fts-lucene/lucene-wrapper.cc @@ -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; diff --git a/src/plugins/fts-solr/fts-backend-solr-old.c b/src/plugins/fts-solr/fts-backend-solr-old.c index c377644142..5ffbc8ad82 100644 --- a/src/plugins/fts-solr/fts-backend-solr-old.c +++ b/src/plugins/fts-solr/fts-backend-solr-old.c @@ -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) diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index 3c2da2f73a..5d0d3ac390 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -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: diff --git a/src/plugins/fts/fts-api.c b/src/plugins/fts/fts-api.c index f3a94223ce..5eec770bc8 100644 --- a/src/plugins/fts/fts-api.c +++ b/src/plugins/fts/fts-api.c @@ -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; } diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index 31b2fe93ae..b4b500982d 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -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; }