Skip to content

Commit 2be7785

Browse files
committed
Add new config options for fts_solr
..to avoid adding _all_ headers to solr index (limit_mime_hdr) and to disable adding field names to solr index (skip_mime_hdr_fieldname) Credits to: * Matthias Schaff <[email protected]> * Nikolaus Zirwes <[email protected]>
1 parent 626098f commit 2be7785

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

src/plugins/fts-solr/fts-backend-solr.c

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -510,21 +510,39 @@ fts_backend_solr_update_set_build_key(struct fts_backend_update_context *_ctx,
510510
{
511511
struct solr_fts_backend_update_context *ctx =
512512
(struct solr_fts_backend_update_context *)_ctx;
513+
struct solr_fts_backend *backend = (struct solr_fts_backend *)ctx->ctx.backend;
514+
struct fts_solr_user *fuser = FTS_SOLR_USER_CONTEXT(backend->backend.ns->user);
513515

514516
if (key->uid != ctx->prev_uid)
515517
fts_backend_solr_uid_changed(ctx, key->uid);
516518

517-
switch (key->type) {
518-
case FTS_BACKEND_BUILD_KEY_HDR:
519+
bool want_indexed = FALSE;
520+
bool want_hdr = TRUE;
521+
if (key->type == FTS_BACKEND_BUILD_KEY_HDR || key->type == FTS_BACKEND_BUILD_KEY_MIME_HDR) {
519522
if (fts_header_want_indexed(key->hdr_name)) {
520-
ctx->cur_value2 =
521-
fts_solr_field_get(ctx, key->hdr_name);
523+
want_indexed = TRUE;
524+
} else if (fuser->set.limit_mime_hdr) {
525+
want_hdr = FALSE;
526+
}
527+
528+
if (!want_indexed && !want_hdr) {
529+
return FALSE;
522530
}
531+
}
532+
533+
switch (key->type) {
534+
case FTS_BACKEND_BUILD_KEY_HDR:
535+
if (want_indexed)
536+
ctx->cur_value2 = fts_solr_field_get(ctx, key->hdr_name);
523537
/* fall through */
524538
case FTS_BACKEND_BUILD_KEY_MIME_HDR:
525539
ctx->cur_value = fts_solr_field_get(ctx, "hdr");
526-
xml_encode(ctx->cur_value, key->hdr_name);
527-
str_append(ctx->cur_value, ": ");
540+
if (want_hdr) {
541+
if(!fuser->set.skip_mime_hdr_fieldname) {
542+
xml_encode(ctx->cur_value, key->hdr_name);
543+
str_append(ctx->cur_value, ": ");
544+
}
545+
}
528546
break;
529547
case FTS_BACKEND_BUILD_KEY_BODY_PART:
530548
if (!ctx->body_open) {
@@ -843,7 +861,7 @@ fts_backend_solr_lookup(struct fts_backend *_backend, struct mailbox *box,
843861
if (solr_search(_backend, str, box_guid,
844862
&result->maybe_uids, &result->scores) < 0)
845863
return -1;
846-
}
864+
}
847865
result->scores_sorted = TRUE;
848866
return 0;
849867
}

src/plugins/fts-solr/fts-solr-plugin.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ fts_solr_plugin_init_settings(struct mail_user *user,
3737
} else if (strcmp(*tmp, "default_ns=") == 0) {
3838
set->default_ns_prefix =
3939
p_strdup(user->pool, *tmp + 11);
40+
} else if (strcmp(*tmp, "limit_mime_hdr") == 0) {
41+
set->limit_mime_hdr = TRUE;
42+
} else if (strcmp(*tmp, "skip_mime_hdr_fieldname") == 0) {
43+
set->skip_mime_hdr_fieldname = TRUE;
4044
} else {
4145
i_error("fts_solr: Invalid setting: %s", *tmp);
4246
return -1;

src/plugins/fts-solr/fts-solr-plugin.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ struct fts_solr_settings {
1212
const char *url, *default_ns_prefix;
1313
bool use_libfts;
1414
bool debug;
15+
bool limit_mime_hdr;
16+
bool skip_mime_hdr_fieldname;
1517
};
1618

1719
struct fts_solr_user {

0 commit comments

Comments
 (0)