diff options
author | metamuffin <metamuffin@disroot.org> | 2024-04-15 15:19:29 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-04-15 15:19:29 +0200 |
commit | c988e7db759966d9586471e8cfcfd0d91e855dc0 (patch) | |
tree | 447f2b817bc04a9591f07c11e913b35b651cd0cd /server/src/routes/ui/search.rs | |
parent | c5bb4949eb0959ec3a3c2fa010d2d7549347e587 (diff) | |
download | jellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar jellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar.bz2 jellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar.zst |
fulltext search pt.2
Diffstat (limited to 'server/src/routes/ui/search.rs')
-rw-r--r-- | server/src/routes/ui/search.rs | 83 |
1 files changed, 43 insertions, 40 deletions
diff --git a/server/src/routes/ui/search.rs b/server/src/routes/ui/search.rs index eb222c9..cafa755 100644 --- a/server/src/routes/ui/search.rs +++ b/server/src/routes/ui/search.rs @@ -5,7 +5,9 @@ use super::{ node::NodeCard, }; use edit_distance::edit_distance; -use jellybase::database::{DataAcid, ReadableTable, T_NODE, T_USER_NODE}; +use jellybase::database::{ + tantivy::query::QueryParser, DataAcid, ReadableTable, T_NODE, T_USER_NODE, +}; use rocket::{get, State}; #[get("/search?<query>")] @@ -14,47 +16,48 @@ pub async fn r_search<'a>( db: &State<DataAcid>, query: Option<&str>, ) -> MyResult<DynLayoutPage<'a>> { - let results = if let Some(query) = query { - let mut items = { - let txn = db.begin_read()?; - let nodes = txn.open_table(T_NODE)?; - let node_users = txn.open_table(T_USER_NODE)?; - let i = nodes - .iter()? - .map(|a| { - let (x, y) = a.unwrap(); - let (x, y) = (x.value().to_owned(), y.value().0); - let z = node_users - .get(&(session.user.name.as_str(), x.as_str())) - .unwrap() - .map(|z| z.value().0) - .unwrap_or_default(); - let y = y.public; - (x, y, z) - }) - .collect::<Vec<_>>(); - drop(nodes); - i - }; - - let query = query.to_lowercase(); - items.sort_by_cached_key(|(_, n, _)| { - n.title - .as_ref() - .map(|x| x.to_lowercase()) - .unwrap_or_default() - .split(" ") - .map(|tok| edit_distance(query.as_str(), tok)) - .min() - .unwrap_or(usize::MAX) - }); + // let results = if let Some(query) = query { + // let mut items = { + // let txn = db.begin_read()?; + // let nodes = txn.open_table(T_NODE)?; + // let node_users = txn.open_table(T_USER_NODE)?; + // let i = nodes + // .iter()? + // .map(|a| { + // let (x, y) = a.unwrap(); + // let (x, y) = (x.value().to_owned(), y.value().0); + // let z = node_users + // .get(&(session.user.name.as_str(), x.as_str())) + // .unwrap() + // .map(|z| z.value().0) + // .unwrap_or_default(); + // let y = y.public; + // (x, y, z) + // }) + // .collect::<Vec<_>>(); + // drop(nodes); + // i + // }; + // let query = query.to_lowercase(); + // items.sort_by_cached_key(|(_, n, _)| { + // n.title + // .as_ref() + // .map(|x| x.to_lowercase()) + // .unwrap_or_default() + // .split(" ") + // .map(|tok| edit_distance(query.as_str(), tok)) + // .min() + // .unwrap_or(usize::MAX) + // }); + // Some(items.into_iter().take(64).collect::<Vec<_>>()) + // } else { + // None + // }; - Some(items.into_iter().take(64).collect::<Vec<_>>()) - } else { - None - }; + let query = QueryParser::for_index(index, vec![]); - Ok(LayoutPage { + let searcher = db.node_index.reader.searcher(); + searcher.Ok(LayoutPage { title: "Search".to_string(), class: Some("search"), content: markup::new! { |