server: add postgres based newsreader search and disable tantivy

This commit is contained in:
2024-12-17 09:31:51 -08:00
parent e36f4f97f9
commit 13eaf33b1a
9 changed files with 86 additions and 32 deletions

View File

@@ -3,6 +3,7 @@ pub mod error;
pub mod graphql;
pub mod newsreader;
pub mod nm;
#[cfg(feature = "tantivy")]
pub mod tantivy;
use std::{collections::HashMap, convert::Infallible, fmt, str::FromStr, sync::Arc};
@@ -612,6 +613,7 @@ pub struct Query {
pub uids: Vec<String>,
pub remainder: Vec<String>,
pub is_notmuch: bool,
pub is_newsreader: bool,
pub is_tantivy: bool,
pub corpus: Option<Corpus>,
}
@@ -630,6 +632,9 @@ impl fmt::Display for Query {
if self.is_notmuch {
write!(f, "is:mail ")?;
}
if self.is_newsreader {
write!(f, "is:newsreader ")?;
}
if self.is_tantivy {
write!(f, "is:news ")?;
}
@@ -675,6 +680,7 @@ impl FromStr for Query {
let mut uids = Vec::new();
let mut remainder = Vec::new();
let mut is_notmuch = false;
let mut is_newsreader = false;
let mut is_tantivy = false;
let mut corpus = None;
for word in s.split_whitespace() {
@@ -701,15 +707,18 @@ impl FromStr for Query {
uids.push(word.to_string());
} else if word == "is:mail" || word == "is:email" || word == "is:notmuch" {
is_notmuch = true;
} else if word == "is:news" || word == "is:newsreader" {
} else if word == "is:news" {
is_tantivy = true;
} else if word == "is:newsreader" {
is_newsreader = true;
} else {
remainder.push(word.to_string());
}
}
// If we don't see any explicit filters for a corpus, flip them all on
if corpus.is_none() && !(is_notmuch || is_tantivy) {
if corpus.is_none() && !(is_notmuch || is_tantivy || is_newsreader) {
is_notmuch = true;
is_newsreader = true;
is_tantivy = true;
}
Ok(Query {
@@ -718,6 +727,7 @@ impl FromStr for Query {
uids,
remainder,
is_notmuch,
is_newsreader,
is_tantivy,
corpus,
})