Mercurial > dovecot > core-2.2
changeset 19759:ca563b2b6788
fts: When searching data headers, don't expand search keys to all languages.
For example "SEARCH HEADER Message-Id foo@example.com" works better the
less expansion there is for "foo@example.com".
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 16 Feb 2016 18:34:19 +0200 |
parents | 526084651206 |
children | a46848c73d7f |
files | src/plugins/fts/fts-search-args.c src/plugins/fts/fts-user.c src/plugins/fts/fts-user.h |
diffstat | 3 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/fts/fts-search-args.c Tue Feb 16 18:33:46 2016 +0200 +++ b/src/plugins/fts/fts-search-args.c Tue Feb 16 18:34:19 2016 +0200 @@ -148,7 +148,13 @@ struct mail_search_arg *or_arg, *orig_arg = *argp; const char *error, *orig_token = orig_arg->value.str; - languages = fts_user_get_all_languages(backend->ns->user); + if ((*argp)->type == SEARCH_HEADER && + !fts_header_has_language((*argp)->hdr_field_name)) { + /* use only the data-language */ + languages = fts_user_get_data_languages(backend->ns->user); + } else { + languages = fts_user_get_all_languages(backend->ns->user); + } /* OR together all the different expansions for different languages. it's enough for one of them to match. */
--- a/src/plugins/fts/fts-user.c Tue Feb 16 18:33:46 2016 +0200 +++ b/src/plugins/fts/fts-user.c Tue Feb 16 18:34:19 2016 +0200 @@ -17,7 +17,7 @@ struct fts_language_list *lang_list; struct fts_user_language *data_lang; - ARRAY_TYPE(fts_user_language) languages; + ARRAY_TYPE(fts_user_language) languages, data_languages; }; static MODULE_CONTEXT_DEFINE_INIT(fts_user_module, @@ -292,6 +292,10 @@ &user_lang->filter, &error) < 0) i_unreached(); i_assert(user_lang->filter != NULL); + + p_array_init(&fuser->data_languages, user->pool, 1); + array_append(&fuser->data_languages, &user_lang, 1); + fuser->data_lang = user_lang; return 0; } @@ -311,6 +315,14 @@ return &fuser->languages; } +const ARRAY_TYPE(fts_user_language) * +fts_user_get_data_languages(struct mail_user *user) +{ + struct fts_user *fuser = FTS_USER_CONTEXT(user); + + return &fuser->data_languages; +} + struct fts_user_language *fts_user_get_data_lang(struct mail_user *user) { struct fts_user *fuser = FTS_USER_CONTEXT(user);
--- a/src/plugins/fts/fts-user.h Tue Feb 16 18:33:46 2016 +0200 +++ b/src/plugins/fts/fts-user.h Tue Feb 16 18:34:19 2016 +0200 @@ -15,6 +15,8 @@ const ARRAY_TYPE(fts_user_language) * fts_user_get_all_languages(struct mail_user *user); struct fts_user_language *fts_user_get_data_lang(struct mail_user *user); +const ARRAY_TYPE(fts_user_language) * +fts_user_get_data_languages(struct mail_user *user); int fts_mail_user_init(struct mail_user *user, const char **error_r); void fts_mail_user_deinit(struct mail_user *user);