forked from didirus/AstralRinth
Refactor Meilisearch, update to latest SDK, and implement faceted search (#44)
* feat(indexing): Reindex curseforge & local database at an interval * fix(indexing): Use strings for meilisearch primary key Fixes #17 by prefixing curseforge ids with "curse-" and local ids with "local-". * feat(indexing): Add newly created mods to the index more quickly * feat(indexing): Implement faceted search, update to meilisearch master Fixes #9, but only uses faceted search for categories. It should be reasonably simple to add support for versions, but it may not be as useful due to the large number of versions and the large number of supported versions for each mod. * feat(indexing): Allow skipping initial indexing Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
This commit is contained in:
31
src/search/indexing/queue.rs
Normal file
31
src/search/indexing/queue.rs
Normal file
@@ -0,0 +1,31 @@
|
||||
use super::{add_mods, IndexingError, UploadSearchMod};
|
||||
use std::sync::Mutex;
|
||||
|
||||
pub struct CreationQueue {
|
||||
// There's probably a better structure for this, but a mutex works
|
||||
// and I don't think this can deadlock. This queue requires fast
|
||||
// writes and then a single potentially slower read/write that
|
||||
// empties the queue.
|
||||
queue: Mutex<Vec<UploadSearchMod>>,
|
||||
}
|
||||
|
||||
impl CreationQueue {
|
||||
pub fn new() -> Self {
|
||||
CreationQueue {
|
||||
queue: Mutex::new(Vec::with_capacity(10)),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn add(&self, search_mod: UploadSearchMod) {
|
||||
// Can only panic if mutex is poisoned
|
||||
self.queue.lock().unwrap().push(search_mod);
|
||||
}
|
||||
pub fn take(&self) -> Vec<UploadSearchMod> {
|
||||
std::mem::replace(&mut *self.queue.lock().unwrap(), Vec::with_capacity(10))
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn index_queue(queue: &CreationQueue) -> Result<(), IndexingError> {
|
||||
let queue = queue.take();
|
||||
add_mods(queue).await
|
||||
}
|
||||
Reference in New Issue
Block a user