changeset 13105:e6eac5f1e21b

fts: Convert input text to decomposed titlecase only for Squat backend. Lucene and Solr can handle case-insensitivity internally.
author Timo Sirainen <tss@iki.fi>
date Tue, 26 Jul 2011 13:38:35 +0300
parents 2224c74b0187
children 87430246c3e1
files src/plugins/fts-squat/fts-backend-squat.c src/plugins/fts/fts-api-private.h src/plugins/fts/fts-build-private.h src/plugins/fts/fts-build.c
diffstat 4 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/fts-squat/fts-backend-squat.c	Fri Jul 22 13:52:27 2011 +0300
+++ b/src/plugins/fts-squat/fts-backend-squat.c	Tue Jul 26 13:38:35 2011 +0300
@@ -448,7 +448,7 @@
 
 struct fts_backend fts_backend_squat = {
 	.name = "squat",
-	.flags = 0,
+	.flags = FTS_BACKEND_FLAG_BUILD_DTCASE,
 
 	{
 		fts_backend_squat_alloc,
--- a/src/plugins/fts/fts-api-private.h	Fri Jul 22 13:52:27 2011 +0300
+++ b/src/plugins/fts/fts-api-private.h	Tue Jul 26 13:38:35 2011 +0300
@@ -47,7 +47,10 @@
 
 enum fts_backend_flags {
 	/* Backend supports indexing binary MIME parts */
-	FTS_BACKEND_FLAG_BINARY_MIME_PARTS	= 0x01
+	FTS_BACKEND_FLAG_BINARY_MIME_PARTS	= 0x01,
+	/* Send built text to backend as decomposed titlecase rather than
+	   preserving original case */
+	FTS_BACKEND_FLAG_BUILD_DTCASE		= 0x02
 };
 
 struct fts_backend {
--- a/src/plugins/fts/fts-build-private.h	Fri Jul 22 13:52:27 2011 +0300
+++ b/src/plugins/fts/fts-build-private.h	Tue Jul 26 13:38:35 2011 +0300
@@ -29,6 +29,7 @@
 	char *content_type, *content_disposition;
 
 	unsigned int binary_mime_parts:1;
+	unsigned int dtcase:1;
 	unsigned int notified:1;
 	unsigned int failed:1;
 };
--- a/src/plugins/fts/fts-build.c	Fri Jul 22 13:52:27 2011 +0300
+++ b/src/plugins/fts/fts-build.c	Tue Jul 26 13:38:35 2011 +0300
@@ -125,7 +125,7 @@
 
 int fts_build_mail(struct fts_storage_build_context *ctx, struct mail *mail)
 {
-	enum message_decoder_flags decoder_flags = MESSAGE_DECODER_FLAG_DTCASE;
+	enum message_decoder_flags decoder_flags = 0;
 	struct istream *input;
 	struct message_parser_ctx *parser;
 	struct message_decoder_context *decoder;
@@ -144,7 +144,8 @@
 				     MESSAGE_HEADER_PARSER_FLAG_CLEAN_ONELINE,
 				     0);
 
-
+	if (ctx->dtcase)
+		decoder_flags |= MESSAGE_DECODER_FLAG_DTCASE;
 	if (ctx->binary_mime_parts)
 		decoder_flags |= MESSAGE_DECODER_FLAG_RETURN_BINARY;
 	decoder = message_decoder_init(decoder_flags);
@@ -280,6 +281,8 @@
 
 	(*build_ctx_r)->box = box;
 	(*build_ctx_r)->v = *v;
+	(*build_ctx_r)->dtcase =
+		(backend->flags & FTS_BACKEND_FLAG_BUILD_DTCASE) != 0;
 	(*build_ctx_r)->binary_mime_parts =
 		(backend->flags & FTS_BACKEND_FLAG_BINARY_MIME_PARTS) != 0;
 	return 1;