Database schema optimization - part 11
This commit is contained in:
@@ -378,15 +378,21 @@ impl ArchivedCalendarEvent {
|
||||
.filter(|e| e.component_type.is_scheduling_object())
|
||||
{
|
||||
for entry in component.entries.iter() {
|
||||
let (is_lang, field) = match entry.name {
|
||||
ArchivedICalendarProperty::Summary => (true, CalendarSearchField::Title),
|
||||
let (is_lang, is_keyword, field) = match entry.name {
|
||||
ArchivedICalendarProperty::Summary => (true, false, CalendarSearchField::Title),
|
||||
ArchivedICalendarProperty::Description => {
|
||||
(true, CalendarSearchField::Description)
|
||||
(true, false, CalendarSearchField::Description)
|
||||
}
|
||||
ArchivedICalendarProperty::Location => (false, CalendarSearchField::Location),
|
||||
ArchivedICalendarProperty::Organizer => (false, CalendarSearchField::Owner),
|
||||
ArchivedICalendarProperty::Attendee => (false, CalendarSearchField::Attendee),
|
||||
ArchivedICalendarProperty::Uid => (false, CalendarSearchField::Uid),
|
||||
ArchivedICalendarProperty::Location => {
|
||||
(false, false, CalendarSearchField::Location)
|
||||
}
|
||||
ArchivedICalendarProperty::Organizer => {
|
||||
(false, false, CalendarSearchField::Owner)
|
||||
}
|
||||
ArchivedICalendarProperty::Attendee => {
|
||||
(false, false, CalendarSearchField::Attendee)
|
||||
}
|
||||
ArchivedICalendarProperty::Uid => (false, true, CalendarSearchField::Uid),
|
||||
_ => continue,
|
||||
};
|
||||
let field = SearchField::Calendar(field);
|
||||
@@ -406,7 +412,7 @@ impl ArchivedCalendarEvent {
|
||||
_ => None,
|
||||
}))
|
||||
{
|
||||
let value = value.strip_prefix("mailto:").unwrap_or(value);
|
||||
let value = value.strip_prefix("mailto:").unwrap_or(value).trim();
|
||||
let lang = if is_lang {
|
||||
detector.detect(value, MIN_LANGUAGE_SCORE);
|
||||
Language::Unknown
|
||||
@@ -414,7 +420,11 @@ impl ArchivedCalendarEvent {
|
||||
Language::None
|
||||
};
|
||||
|
||||
document.index_text(field.clone(), value, lang);
|
||||
if !is_keyword {
|
||||
document.index_text(field.clone(), value, lang);
|
||||
} else {
|
||||
document.index_keyword(field.clone(), value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ use store::{
|
||||
IterateParams, U16_LEN, U32_LEN, U64_LEN, ValueKey,
|
||||
roaring::RoaringBitmap,
|
||||
write::{
|
||||
Archive, BatchBuilder, IndexPropertyClass, TaskQueueClass, ValueClass,
|
||||
Archive, BatchBuilder, IndexPropertyClass, TaskEpoch, TaskQueueClass, ValueClass,
|
||||
key::{DeserializeBigEndian, KeySerializer},
|
||||
now,
|
||||
},
|
||||
@@ -520,7 +520,7 @@ impl CalendarAlarm {
|
||||
} => {
|
||||
batch.set(
|
||||
ValueClass::TaskQueue(TaskQueueClass::SendAlarm {
|
||||
due: self.alarm_time as u64,
|
||||
due: TaskEpoch::new(self.alarm_time as u64),
|
||||
event_id: self.event_id,
|
||||
alarm_id: self.alarm_id,
|
||||
is_email_alert: true,
|
||||
@@ -536,7 +536,7 @@ impl CalendarAlarm {
|
||||
CalendarAlarmType::Display { recurrence_id } => {
|
||||
batch.set(
|
||||
ValueClass::TaskQueue(TaskQueueClass::SendAlarm {
|
||||
due: self.alarm_time as u64,
|
||||
due: TaskEpoch::new(self.alarm_time as u64),
|
||||
event_id: self.event_id,
|
||||
alarm_id: self.alarm_id,
|
||||
is_email_alert: false,
|
||||
@@ -551,7 +551,7 @@ impl CalendarAlarm {
|
||||
|
||||
pub fn delete_task(&self, batch: &mut BatchBuilder) {
|
||||
batch.clear(ValueClass::TaskQueue(TaskQueueClass::SendAlarm {
|
||||
due: self.alarm_time as u64,
|
||||
due: TaskEpoch::new(self.alarm_time as u64),
|
||||
event_id: self.event_id,
|
||||
alarm_id: self.alarm_id,
|
||||
is_email_alert: matches!(self.typ, CalendarAlarmType::Email { .. }),
|
||||
|
||||
@@ -273,20 +273,20 @@ impl ArchivedContactCard {
|
||||
let mut detector = LanguageDetector::new();
|
||||
|
||||
for entry in self.card.entries.iter() {
|
||||
let (is_text, field) = match entry.name {
|
||||
ArchivedVCardProperty::N => (false, ContactSearchField::Name),
|
||||
ArchivedVCardProperty::Nickname => (false, ContactSearchField::Nickname),
|
||||
ArchivedVCardProperty::Org => (false, ContactSearchField::Organization),
|
||||
ArchivedVCardProperty::Email => (false, ContactSearchField::Email),
|
||||
ArchivedVCardProperty::Tel => (false, ContactSearchField::Phone),
|
||||
let (is_text, is_keyword, field) = match entry.name {
|
||||
ArchivedVCardProperty::N => (false, false, ContactSearchField::Name),
|
||||
ArchivedVCardProperty::Nickname => (false, false, ContactSearchField::Nickname),
|
||||
ArchivedVCardProperty::Org => (false, false, ContactSearchField::Organization),
|
||||
ArchivedVCardProperty::Email => (false, false, ContactSearchField::Email),
|
||||
ArchivedVCardProperty::Tel => (false, false, ContactSearchField::Phone),
|
||||
ArchivedVCardProperty::Impp | ArchivedVCardProperty::Socialprofile => {
|
||||
(false, ContactSearchField::OnlineService)
|
||||
(false, false, ContactSearchField::OnlineService)
|
||||
}
|
||||
ArchivedVCardProperty::Adr => (false, ContactSearchField::Address),
|
||||
ArchivedVCardProperty::Note => (true, ContactSearchField::Note),
|
||||
ArchivedVCardProperty::Kind => (false, ContactSearchField::Kind),
|
||||
ArchivedVCardProperty::Uid => (false, ContactSearchField::Uid),
|
||||
ArchivedVCardProperty::Member => (false, ContactSearchField::Member),
|
||||
ArchivedVCardProperty::Adr => (false, false, ContactSearchField::Address),
|
||||
ArchivedVCardProperty::Note => (true, false, ContactSearchField::Note),
|
||||
ArchivedVCardProperty::Kind => (false, true, ContactSearchField::Kind),
|
||||
ArchivedVCardProperty::Uid => (false, true, ContactSearchField::Uid),
|
||||
ArchivedVCardProperty::Member => (false, false, ContactSearchField::Member),
|
||||
_ => continue,
|
||||
};
|
||||
let field = SearchField::Contact(field);
|
||||
@@ -295,28 +295,32 @@ impl ArchivedContactCard {
|
||||
for value in entry.values.iter() {
|
||||
match value {
|
||||
ArchivedVCardValue::Text(v) => {
|
||||
let lang = if is_text {
|
||||
detector.detect(v.as_str(), MIN_LANGUAGE_SCORE);
|
||||
Language::Unknown
|
||||
} else {
|
||||
Language::None
|
||||
};
|
||||
if !is_keyword {
|
||||
let lang = if is_text {
|
||||
detector.detect(v.as_str().trim(), MIN_LANGUAGE_SCORE);
|
||||
Language::Unknown
|
||||
} else {
|
||||
Language::None
|
||||
};
|
||||
|
||||
document.index_text(field.clone(), v, lang);
|
||||
document.index_text(field.clone(), v, lang);
|
||||
} else {
|
||||
document.index_keyword(field.clone(), v.as_str());
|
||||
}
|
||||
}
|
||||
ArchivedVCardValue::Kind(v) => {
|
||||
document.index_text(field.clone(), v.as_str(), Language::None);
|
||||
document.index_keyword(field.clone(), v.as_str());
|
||||
}
|
||||
ArchivedVCardValue::Component(v) => {
|
||||
for item in v.iter() {
|
||||
document.index_text(field.clone(), item, Language::None);
|
||||
document.index_text(field.clone(), item.trim(), Language::None);
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
for param in entry.params.iter() {
|
||||
/*for param in entry.params.iter() {
|
||||
if let ArchivedVCardParameterValue::Text(value) = ¶m.value {
|
||||
let lang = if is_text {
|
||||
detector.detect(value.as_str(), MIN_LANGUAGE_SCORE);
|
||||
@@ -326,7 +330,7 @@ impl ArchivedContactCard {
|
||||
};
|
||||
document.index_text(field.clone(), value, lang);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ use calcard::{
|
||||
use common::PROD_ID;
|
||||
use store::{
|
||||
Serialize,
|
||||
write::{Archiver, BatchBuilder, TaskQueueClass, ValueClass, now},
|
||||
write::{Archiver, BatchBuilder, TaskEpoch, TaskQueueClass, ValueClass},
|
||||
};
|
||||
use trc::AddContext;
|
||||
|
||||
@@ -278,7 +278,7 @@ impl ItipMessages {
|
||||
}
|
||||
|
||||
pub fn queue(self, batch: &mut BatchBuilder) -> trc::Result<()> {
|
||||
let due = now();
|
||||
let due = TaskEpoch::now().with_random_sequence_id();
|
||||
batch.set(
|
||||
ValueClass::TaskQueue(TaskQueueClass::SendImip {
|
||||
due,
|
||||
|
||||
Reference in New Issue
Block a user