* mu-store-xapian: more clearly separate index/term/value
This commit is contained in:
@ -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,17 +202,20 @@ 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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mu_msg_field_xapian_term(field))
|
||||||
|
/* 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),
|
doc.add_value ((Xapian::valueno)mu_msg_field_id (field),
|
||||||
value);
|
value);
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user