* make prio: fields now also searchable

This commit is contained in:
Dirk-Jan C. Binnema 2010-11-21 15:42:53 +02:00
parent 79395b11ac
commit 29ed5fbcf3
3 changed files with 34 additions and 10 deletions

View File

@ -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
},
{

View File

@ -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);

View File

@ -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);
}