dovecot-1.1: fts-solr: Added break-imap-search setting to use So...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Jul 13 15:37:52 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/cad4ad873ff9
changeset: 7751:cad4ad873ff9
user: Timo Sirainen <tss at iki.fi>
date: Sun Jul 13 15:15:04 2008 +0300
description:
fts-solr: Added break-imap-search setting to use Solr with SEARCH TEXT/BODY
parameters. This makes the SEARCH non-compliant with standard IMAP protocol,
because TEXT/BODY require support for substring searches and Lucene doesn't
support them.
diffstat:
5 files changed, 45 insertions(+), 27 deletions(-)
src/plugins/fts-solr/fts-backend-solr.c | 7 +++++--
src/plugins/fts-solr/fts-solr-plugin.c | 29 +++++++++++++++++++++++++++++
src/plugins/fts-solr/fts-solr-plugin.h | 7 +++++++
src/plugins/fts-solr/solr-connection.c | 27 +++------------------------
src/plugins/fts-solr/solr-connection.h | 2 +-
diffs (154 lines):
diff -r a0b9325d4967 -r cad4ad873ff9 src/plugins/fts-solr/fts-backend-solr.c
--- a/src/plugins/fts-solr/fts-backend-solr.c Sun Jul 13 15:05:52 2008 +0300
+++ b/src/plugins/fts-solr/fts-backend-solr.c Sun Jul 13 15:15:04 2008 +0300
@@ -7,7 +7,6 @@
#include "solr-connection.h"
#include "fts-solr-plugin.h"
-#include <stdlib.h>
#include <curl/curl.h>
#define SOLR_CMDBUF_SIZE (1024*64)
@@ -59,13 +58,17 @@ static struct fts_backend *
static struct fts_backend *
fts_backend_solr_init(struct mailbox *box ATTR_UNUSED)
{
+ const struct fts_solr_settings *set = &fts_solr_settings;
struct fts_backend *backend;
if (solr_conn == NULL)
- solr_conn = solr_connection_init(getenv("FTS_SOLR"));
+ solr_conn = solr_connection_init(set->url, set->debug);
backend = i_new(struct fts_backend, 1);
*backend = fts_backend_solr;
+
+ if (set->substring_search)
+ backend->flags |= FTS_BACKEND_FLAG_SUBSTRING_LOOKUPS;
return backend;
}
diff -r a0b9325d4967 -r cad4ad873ff9 src/plugins/fts-solr/fts-solr-plugin.c
--- a/src/plugins/fts-solr/fts-solr-plugin.c Sun Jul 13 15:05:52 2008 +0300
+++ b/src/plugins/fts-solr/fts-solr-plugin.c Sun Jul 13 15:15:04 2008 +0300
@@ -3,14 +3,43 @@
#include "lib.h"
#include "fts-solr-plugin.h"
+#include <stdlib.h>
+
const char *fts_solr_plugin_version = PACKAGE_VERSION;
+struct fts_solr_settings fts_solr_settings;
+
+static void fts_solr_plugin_init_settings(const char *str)
+{
+ struct fts_solr_settings *set = &fts_solr_settings;
+ const char *const *tmp;
+
+ if (str == NULL)
+ str = "";
+
+ for (tmp = t_strsplit_spaces(str, " "); *tmp != NULL; tmp++) {
+ if (strncmp(*tmp, "url=", 4) == 0) {
+ i_free(set->url);
+ set->url = i_strdup(*tmp + 4);
+ } else if (strcmp(*tmp, "debug") == 0) {
+ set->debug = TRUE;
+ } else if (strcmp(*tmp, "break-imap-search") == 0) {
+ set->substring_search = TRUE;
+ } else {
+ i_fatal("fts_solr: Invalid setting: %s", *tmp);
+ }
+ }
+ if (set->url == NULL)
+ i_fatal("fts_solr: url setting missing");
+}
void fts_solr_plugin_init(void)
{
+ fts_solr_plugin_init_settings(getenv("FTS_SOLR"));
fts_backend_register(&fts_backend_solr);
}
void fts_solr_plugin_deinit(void)
{
+ i_free(fts_solr_settings.url);
fts_backend_unregister(fts_backend_solr.name);
}
diff -r a0b9325d4967 -r cad4ad873ff9 src/plugins/fts-solr/fts-solr-plugin.h
--- a/src/plugins/fts-solr/fts-solr-plugin.h Sun Jul 13 15:05:52 2008 +0300
+++ b/src/plugins/fts-solr/fts-solr-plugin.h Sun Jul 13 15:15:04 2008 +0300
@@ -3,6 +3,13 @@
#include "fts-api-private.h"
+struct fts_solr_settings {
+ char *url;
+ bool debug;
+ bool substring_search;
+};
+
+extern struct fts_solr_settings fts_solr_settings;
extern struct fts_backend fts_backend_solr;
void fts_solr_plugin_init(void);
diff -r a0b9325d4967 -r cad4ad873ff9 src/plugins/fts-solr/solr-connection.c
--- a/src/plugins/fts-solr/solr-connection.c Sun Jul 13 15:05:52 2008 +0300
+++ b/src/plugins/fts-solr/solr-connection.c Sun Jul 13 15:15:04 2008 +0300
@@ -55,28 +55,6 @@ struct solr_connection {
unsigned int posting:1;
unsigned int xml_failed:1;
};
-
-static void
-solr_conn_init_settings(struct solr_connection *conn, const char *str)
-{
- const char *const *tmp;
-
- if (str == NULL)
- str = "";
-
- for (tmp = t_strsplit_spaces(str, " "); *tmp != NULL; tmp++) {
- if (strncmp(*tmp, "url=", 4) == 0) {
- i_free(conn->url);
- conn->url = i_strdup(*tmp + 4);
- } else if (strcmp(*tmp, "debug") == 0) {
- conn->debug = TRUE;
- } else {
- i_fatal("fts_solr: Invalid setting: %s", *tmp);
- }
- }
- if (conn->url == NULL)
- i_fatal("fts_solr: url setting missing");
-}
static size_t
curl_output_func(void *data, size_t element_size, size_t nmemb, void *context)
@@ -149,12 +127,13 @@ curl_header_func(void *data, size_t elem
return size;
}
-struct solr_connection *solr_connection_init(const char *settings)
+struct solr_connection *solr_connection_init(const char *url, bool debug)
{
struct solr_connection *conn;
conn = i_new(struct solr_connection, 1);
- solr_conn_init_settings(conn, settings);
+ conn->url = i_strdup(url);
+ conn->debug = debug;
conn->curlm = curl_multi_init();
conn->curl = curl_easy_init();
diff -r a0b9325d4967 -r cad4ad873ff9 src/plugins/fts-solr/solr-connection.h
--- a/src/plugins/fts-solr/solr-connection.h Sun Jul 13 15:05:52 2008 +0300
+++ b/src/plugins/fts-solr/solr-connection.h Sun Jul 13 15:15:04 2008 +0300
@@ -3,7 +3,7 @@
#include "seq-range-array.h"
-struct solr_connection *solr_connection_init(const char *settings);
+struct solr_connection *solr_connection_init(const char *url, bool debug);
void solr_connection_deinit(struct solr_connection *conn);
void solr_connection_quote_str(struct solr_connection *conn, string_t *dest,
More information about the dovecot-cvs
mailing list