diff --git a/src/mu-msg-fields.c b/src/mu-msg-fields.c index cd7ddd1b..6062206e 100644 --- a/src/mu-msg-fields.c +++ b/src/mu-msg-fields.c @@ -87,7 +87,7 @@ static const MuMsgField FIELD_DATA[] = { { MU_MSG_FIELD_ID_FLAGS, MU_MSG_FIELD_TYPE_INT, - "flags", 'g', 'G', /* flaGs */ + "flag", 'g', 'G', /* flaGs */ FLAG_GMIME | FLAG_XAPIAN_TERM | FLAG_XAPIAN_VALUE }, @@ -116,7 +116,7 @@ static const MuMsgField FIELD_DATA[] = { MU_MSG_FIELD_ID_PRIO, MU_MSG_FIELD_TYPE_INT, "prio", 'p', 'P', - FLAG_GMIME | FLAG_XAPIAN_VALUE + FLAG_GMIME | FLAG_XAPIAN_TERM | FLAG_XAPIAN_VALUE }, { diff --git a/src/mu-query.cc b/src/mu-query.cc index e9d3a16d..7a0e93ba 100644 --- a/src/mu-query.cc +++ b/src/mu-query.cc @@ -58,7 +58,7 @@ init_mu_query (MuQuery *mqx, const char* dbpath) mu_msg_field_foreach ((MuMsgFieldForEachFunc)add_prefix, (gpointer)mqx->_qparser); - // ////// FIXME + // // ////// FIXME // g_print ("\nsynonyms:\n"); // for (Xapian::TermIterator iter = mqx->_db->synonym_keys_begin(); // iter != mqx->_db->synonym_keys_end(); ++iter) { @@ -102,8 +102,8 @@ get_query (MuQuery * mqx, const char* searchexpr, int *err = 0) { try { return mqx->_qparser->parse_query (searchexpr, - Xapian::QueryParser::FLAG_BOOLEAN | - // Xapian::QueryParser::FLAG_PHRASE | + Xapian::QueryParser::FLAG_BOOLEAN | + Xapian::QueryParser::FLAG_PURE_NOT | Xapian::QueryParser::FLAG_AUTO_SYNONYMS | Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE); @@ -129,7 +129,7 @@ add_prefix (MuMsgFieldId mfid, Xapian::QueryParser* qparser) const std::string shortcut (1, mu_msg_field_shortcut (mfid)); - if (mfid == MU_MSG_FIELD_ID_FLAGS) { + if (mfid == MU_MSG_FIELD_ID_FLAGS || mfid == MU_MSG_FIELD_ID_PRIO) { qparser->add_prefix (mu_msg_field_name(mfid), pfx); qparser->add_prefix (shortcut, pfx); diff --git a/src/mu-store.cc b/src/mu-store.cc index 14267dd2..86083708 100644 --- a/src/mu-store.cc +++ b/src/mu-store.cc @@ -55,16 +55,36 @@ add_synonym_for_flag (MuMsgFlags flag, Xapian::WritableDatabase *db) { std::string pfx (1, mu_msg_field_xapian_prefix (MU_MSG_FIELD_ID_FLAGS)); - - db->add_synonym (pfx + mu_msg_flag_to_name (flag), + + db->clear_synonyms (pfx + mu_msg_flag_name (flag)); + db->add_synonym (pfx + mu_msg_flag_name (flag), pfx + (std::string(1, mu_msg_flag_char (flag)))); } + +static void +add_synonym_for_prio (MuMsgPrio prio, Xapian::WritableDatabase *db) +{ + std::string pfx (1, mu_msg_field_xapian_prefix + (MU_MSG_FIELD_ID_PRIO)); + + std::string s1 (pfx + mu_msg_prio_name (prio)); + std::string s2 (pfx + (std::string(1, mu_msg_prio_char (prio)))); + + db->clear_synonyms (s1); + db->clear_synonyms (s2); + + db->add_synonym (s1, s2); +} + + static void add_synonyms (MuStore *store) { mu_msg_flags_foreach ((MuMsgFlagsForeachFunc)add_synonym_for_flag, store->_db); + mu_msg_prio_foreach ((MuMsgPrioForeachFunc)add_synonym_for_prio, + store->_db); } static gboolean @@ -258,13 +278,17 @@ add_terms_values_number (Xapian::Document& doc, MuMsg *msg, if (mfid == MU_MSG_FIELD_ID_FLAGS) { const char* flags, *cur; - cur = flags = mu_msg_flags_to_str_s ((MuMsgFlags)num); + cur = flags = mu_msg_flags_str_s ((MuMsgFlags)num); while (cur && *cur) { char kar = tolower (*cur); doc.add_term (pfx + kar); ++cur; } - } else + + } else if (mfid == MU_MSG_FIELD_ID_PRIO) { + doc.add_term (pfx + std::string(1, + mu_msg_prio_char((MuMsgPrio)num))); + } else doc.add_term (pfx + numstr); }