diff --git a/src/plugins/fts-solr/fts-backend-solr.c b/src/plugins/fts-solr/fts-backend-solr.c index 329dcc7aab..41cb8d3c7c 100644 --- a/src/plugins/fts-solr/fts-backend-solr.c +++ b/src/plugins/fts-solr/fts-backend-solr.c @@ -510,21 +510,39 @@ fts_backend_solr_update_set_build_key(struct fts_backend_update_context *_ctx, { struct solr_fts_backend_update_context *ctx = (struct solr_fts_backend_update_context *)_ctx; + struct solr_fts_backend *backend = (struct solr_fts_backend *)ctx->ctx.backend; + struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(backend->backend.ns->user); if (key->uid != ctx->prev_uid) fts_backend_solr_uid_changed(ctx, key->uid); - switch (key->type) { - case FTS_BACKEND_BUILD_KEY_HDR: + bool want_indexed = FALSE; + bool want_hdr = TRUE; + if (key->type == FTS_BACKEND_BUILD_KEY_HDR || key->type == FTS_BACKEND_BUILD_KEY_MIME_HDR) { if (fts_header_want_indexed(key->hdr_name)) { - ctx->cur_value2 = - fts_solr_field_get(ctx, key->hdr_name); + want_indexed = TRUE; + } else if (fuser->set.limit_mime_hdr) { + want_hdr = FALSE; + } + + if (!want_indexed && !want_hdr) { + return FALSE; } + } + + switch (key->type) { + case FTS_BACKEND_BUILD_KEY_HDR: + if (want_indexed) + ctx->cur_value2 = fts_solr_field_get(ctx, key->hdr_name); /* fall through */ case FTS_BACKEND_BUILD_KEY_MIME_HDR: ctx->cur_value = fts_solr_field_get(ctx, "hdr"); - xml_encode(ctx->cur_value, key->hdr_name); - str_append(ctx->cur_value, ": "); + if (want_hdr) { + if(!fuser->set.skip_mime_hdr_fieldname) { + xml_encode(ctx->cur_value, key->hdr_name); + str_append(ctx->cur_value, ": "); + } + } break; case FTS_BACKEND_BUILD_KEY_BODY_PART: if (!ctx->body_open) { @@ -843,7 +861,7 @@ fts_backend_solr_lookup(struct fts_backend *_backend, struct mailbox *box, if (solr_search(_backend, str, box_guid, &result->maybe_uids, &result->scores) < 0) return -1; - } + } result->scores_sorted = TRUE; return 0; } diff --git a/src/plugins/fts-solr/fts-solr-plugin.c b/src/plugins/fts-solr/fts-solr-plugin.c index 464c2122ec..9ef49644d3 100644 --- a/src/plugins/fts-solr/fts-solr-plugin.c +++ b/src/plugins/fts-solr/fts-solr-plugin.c @@ -37,6 +37,10 @@ fts_solr_plugin_init_settings(struct mail_user *user, } else if (strcmp(*tmp, "default_ns=") == 0) { set->default_ns_prefix = p_strdup(user->pool, *tmp + 11); + } else if (strcmp(*tmp, "limit_mime_hdr") == 0) { + set->limit_mime_hdr = TRUE; + } else if (strcmp(*tmp, "skip_mime_hdr_fieldname") == 0) { + set->skip_mime_hdr_fieldname = TRUE; } else { i_error("fts_solr: Invalid setting: %s", *tmp); return -1; diff --git a/src/plugins/fts-solr/fts-solr-plugin.h b/src/plugins/fts-solr/fts-solr-plugin.h index f2afd5b9c3..1df0181584 100644 --- a/src/plugins/fts-solr/fts-solr-plugin.h +++ b/src/plugins/fts-solr/fts-solr-plugin.h @@ -12,6 +12,8 @@ struct fts_solr_settings { const char *url, *default_ns_prefix; bool use_libfts; bool debug; + bool limit_mime_hdr; + bool skip_mime_hdr_fieldname; }; struct fts_solr_user {