aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-04-15 15:19:29 +0200
committermetamuffin <metamuffin@disroot.org>2024-04-15 15:19:29 +0200
commitc988e7db759966d9586471e8cfcfd0d91e855dc0 (patch)
tree447f2b817bc04a9591f07c11e913b35b651cd0cd /server/src/routes
parentc5bb4949eb0959ec3a3c2fa010d2d7549347e587 (diff)
downloadjellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar
jellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar.bz2
jellything-c988e7db759966d9586471e8cfcfd0d91e855dc0.tar.zst
fulltext search pt.2
Diffstat (limited to 'server/src/routes')
-rw-r--r--server/src/routes/ui/search.rs83
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! {