* mu-store-xapian: more clearly separate index/term/value

This commit is contained in:
Dirk-Jan C. Binnema
2010-02-08 21:23:41 +02:00
parent 11ed5c7f96
commit f520e41a62

View File

@ -47,7 +47,7 @@ struct _MuStoreXapian {
MuStoreXapian* MuStoreXapian*
mu_store_xapian_new (const char* xpath) mu_store_xapian_new (const char* xpath)
{ {
MuStoreXapian *store; MuStoreXapian *store (0);
g_return_val_if_fail (xpath, NULL); g_return_val_if_fail (xpath, NULL);
@ -202,19 +202,22 @@ add_terms_values_string (Xapian::Document& doc, MuMsgGMime *msg,
const std::string value (str); const std::string value (str);
const std::string prefix (mu_msg_field_xapian_prefix(field)); const std::string prefix (mu_msg_field_xapian_prefix(field));
if (mu_msg_field_is_xapian_indexable (field)) { if (mu_msg_field_xapian_index (field)) {
Xapian::TermGenerator termgen; Xapian::TermGenerator termgen;
termgen.set_document (doc); termgen.set_document (doc);
termgen.index_text_without_positions (str, 1, prefix); termgen.index_text_without_positions (str, 1, prefix);
} else {
/* terms can be up to MU_STORE_XAPIAN_MAX_TERM_LENGTH
* (240) long; this is a Xapian limit */
doc.add_term (std::string (prefix + value, 0,
MU_STORE_XAPIAN_MAX_TERM_LENGTH));
} }
doc.add_value ((Xapian::valueno)mu_msg_field_id (field), if (mu_msg_field_xapian_term(field))
value); /* terms can be up to MU_STORE_XAPIAN_MAX_TERM_LENGTH
* (240) long; this is a Xapian limit
* */
doc.add_term (std::string (prefix + value, 0,
MU_STORE_XAPIAN_MAX_TERM_LENGTH));
if (mu_msg_field_xapian_value(field))
doc.add_value ((Xapian::valueno)mu_msg_field_id (field),
value);
} }
static void static void
@ -249,7 +252,9 @@ add_terms_values (const MuMsgField* field, MsgDoc* msgdoc)
{ {
MuMsgFieldType type; MuMsgFieldType type;
if (!mu_msg_field_is_xapian_enabled(field)) if (!mu_msg_field_xapian_index(field) &&
!mu_msg_field_xapian_term(field) &&
!mu_msg_field_xapian_value(field))
return; return;
type = mu_msg_field_type (field); type = mu_msg_field_type (field);
@ -307,8 +312,8 @@ mu_store_xapian_store (MuStoreXapian *store, MuMsgGMime *msg)
const std::string uid(get_message_uid(msg)); const std::string uid(get_message_uid(msg));
begin_trx_if (store, !store->_in_transaction); begin_trx_if (store, !store->_in_transaction);
/* we must add a unique term, so we can replace matching /* we must add a unique term, so we can replace
* documents */ * matching documents */
newdoc.add_term (uid); newdoc.add_term (uid);
mu_msg_field_foreach ((MuMsgFieldForEachFunc)add_terms_values, mu_msg_field_foreach ((MuMsgFieldForEachFunc)add_terms_values,
&msgdoc); &msgdoc);