Open a fancy_mdbx database to store documents in for the Tantivy backend
This commit is contained in:
parent
cc1ba7c85f
commit
c01740113f
15
Cargo.lock
generated
15
Cargo.lock
generated
@ -950,6 +950,20 @@ version = "0.1.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
|
checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fancy_mdbx"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"libmdbx",
|
||||||
|
"log",
|
||||||
|
"ouroboros",
|
||||||
|
"serde",
|
||||||
|
"serde_bare",
|
||||||
|
"thiserror",
|
||||||
|
"zstd",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastdivide"
|
name = "fastdivide"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@ -3446,6 +3460,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
|
"fancy_mdbx",
|
||||||
"log",
|
"log",
|
||||||
"meilisearch-sdk",
|
"meilisearch-sdk",
|
||||||
"quickpeep_structs",
|
"quickpeep_structs",
|
||||||
|
@ -16,5 +16,6 @@ serde = { version = "1.0.136", features = ["derive"] }
|
|||||||
serde_bare = "0.5.0"
|
serde_bare = "0.5.0"
|
||||||
toml = "0.5.8"
|
toml = "0.5.8"
|
||||||
|
|
||||||
|
fancy_mdbx = { path = "../../../libraries/fancy_mdbx" }
|
||||||
|
|
||||||
quickpeep_structs = { path = "../quickpeep_structs" }
|
quickpeep_structs = { path = "../quickpeep_structs" }
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
use crate::backend::{Backend, BackendIndependentDocument};
|
use crate::backend::{Backend, BackendIndependentDocument};
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
|
use fancy_mdbx::database::WrappedTable;
|
||||||
|
use fancy_mdbx::environment::Env;
|
||||||
|
use fancy_mdbx::wrapper::{CompressorWrapper, SerdeBareWrapper};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use tantivy::schema::{Facet, Field, SchemaBuilder, STORED, TEXT};
|
use tantivy::schema::{Facet, Field, SchemaBuilder, STORED, TEXT};
|
||||||
@ -17,6 +21,15 @@ pub struct TantivyBackend {
|
|||||||
index: Index,
|
index: Index,
|
||||||
fields: Fields,
|
fields: Fields,
|
||||||
index_writer: Option<IndexWriter>,
|
index_writer: Option<IndexWriter>,
|
||||||
|
env: Env,
|
||||||
|
tables: StoreTables,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
|
pub struct DocumentStoreRow {}
|
||||||
|
|
||||||
|
pub struct StoreTables {
|
||||||
|
pub documents: WrappedTable<String, CompressorWrapper<SerdeBareWrapper<DocumentStoreRow>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TantivyBackend {
|
impl TantivyBackend {
|
||||||
@ -28,7 +41,7 @@ impl TantivyBackend {
|
|||||||
let dir_path = path.join("tantivy");
|
let dir_path = path.join("tantivy");
|
||||||
|
|
||||||
let (index, fields) = if dir_path.exists() {
|
let (index, fields) = if dir_path.exists() {
|
||||||
let index = Index::open_in_dir(dir_path)?;
|
let index = Index::open_in_dir(&dir_path)?;
|
||||||
|
|
||||||
let schema = index.schema();
|
let schema = index.schema();
|
||||||
let mut field_map: HashMap<_, _> = schema
|
let mut field_map: HashMap<_, _> = schema
|
||||||
@ -59,15 +72,29 @@ impl TantivyBackend {
|
|||||||
let schema = schema_builder.build();
|
let schema = schema_builder.build();
|
||||||
|
|
||||||
std::fs::create_dir(&dir_path)?;
|
std::fs::create_dir(&dir_path)?;
|
||||||
let index = Index::create_in_dir(dir_path, schema)?;
|
let index = Index::create_in_dir(&dir_path, schema)?;
|
||||||
|
|
||||||
(index, fields)
|
(index, fields)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Open a libMDBX environment
|
||||||
|
let env = Env::open(&dir_path.join("store.mdbx"))?;
|
||||||
|
|
||||||
|
let tables = StoreTables {
|
||||||
|
documents: env.open_wrapped_table(
|
||||||
|
Some("documents"),
|
||||||
|
(),
|
||||||
|
Default::default(),
|
||||||
|
CompressorWrapper::new()?,
|
||||||
|
)?,
|
||||||
|
};
|
||||||
|
|
||||||
Ok(TantivyBackend {
|
Ok(TantivyBackend {
|
||||||
index,
|
index,
|
||||||
fields,
|
fields,
|
||||||
index_writer: None,
|
index_writer: None,
|
||||||
|
env,
|
||||||
|
tables,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use env_logger::Env;
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
|
|
||||||
use quickpeep_densedoc::{DenseTree};
|
use quickpeep_densedoc::DenseTree;
|
||||||
use quickpeep_index::backend::BackendIndependentDocument;
|
use quickpeep_index::backend::BackendIndependentDocument;
|
||||||
use quickpeep_indexer::config::IndexerConfig;
|
use quickpeep_indexer::config::IndexerConfig;
|
||||||
use quickpeep_structs::rake_entries::{PackRecord, RakedPageEntry, SCHEMA_RAKED_PAGES};
|
use quickpeep_structs::rake_entries::{PackRecord, RakedPageEntry, SCHEMA_RAKED_PAGES};
|
||||||
|
Loading…
Reference in New Issue
Block a user