//!
//! Initialize the database when the database or table doesn't exist already
//!
-//! Usage: vecsearch init-database [OPTIONS] --password <PASSWORD>
+//! Usage: vecsearch init-database [OPTIONS] --dbpassword <DBPASSWORD>
//!
//! Options:
-//! --dbname <DBNAME> [default: vsearch]
-//! --host <HOST> [default: localhost]
-//! --user <USER> [default: cvmigrator]
-//! --password <PASSWORD> [env: PASSWORD=]
-//! -h, --help Print help
+//! --dbname <DBNAME> [default: vsearch]
+//! --dbhost <DBHOST> [default: localhost]
+//! --dbuser <DBUSER> [default: cvmigrator]
+//! --dbpassword <DBPASSWORD> [env: DBPASSWORD=]
+//! -h, --help Print help
//! ```
//!
//! For example:
//!
//! ```text
-//! $ export PASSWORD=$(gpg -d pw-cvmigrator.gpg)
+//! $ export DBPASSWORD=$(gpg -d pw-cvmigrator.gpg)
//! $ vecsearch init-database
//! maybe creating the database
//! database vsearch exists already
//! in each invocation.
//!
//! ```text
-//! $ export PASSWORD=$(gpg -d pw-cvmigrator.gpg)
+//! $ export DBPASSWORD=$(gpg -d pw-cvmigrator.gpg)
//! $ vecsearch index --file testdata/0 --file testdata/1
//! indexing file(s)
//! Loaded and encoded 58.565µs
//! superuser).
//!
//! ```text
-//! $ export PASSWORD=$(gpg -d pw-cvmigrator.gpg)
+//! $ export DBPASSWORD=$(gpg -d pw-cvmigrator.gpg)
//! $ vecsearch search --search feline
//! searching for document matches
//! Loaded and encoded 49.306µs
//! ## TODO
//!
//! - why model from PR not main?
+//! - init-model command
+//!
//!
use candle_transformers::models::bert::{BertModel, Config, HiddenAct, DTYPE};
dbname: String,
#[arg(long,env,default_value="localhost")]
- host: String,
+ dbhost: String,
#[arg(long,env,default_value="cvmigrator")]
- user: String,
+ dbuser: String,
#[arg(long,env)]
- password: String,
+ dbpassword: String,
},
/// Read one document and add it to the database index
dbname: String,
#[arg(long,env,default_value="localhost")]
- host: String,
+ dbhost: String,
#[arg(long,env,default_value="cvmigrator")]
- user: String,
+ dbuser: String,
#[arg(long,env)]
- password: String,
+ dbpassword: String,
#[arg(long)]
/// The file containing document contents. Specify multiple
dbname: String,
#[arg(long,env,default_value="localhost")]
- host: String,
+ dbhost: String,
#[arg(long,env,default_value="cvmigrator")]
- user: String,
+ dbuser: String,
#[arg(long,env)]
- password: String,
+ dbpassword: String,
#[arg(long)]
/// Search for this
}
}
-fn init_database(dbname: String, host: String, user: String, password: String) -> Result<()> {
+fn init_database(dbname: String, dbhost: String, dbuser: String, dbpassword: String) -> Result<()> {
println!("maybe creating the database");
let mut client = postgres::Config::new()
.dbname("postgres")
- .host(&host)
- .user(&user)
- .password(password.clone())
+ .host(&dbhost)
+ .user(&dbuser)
+ .password(dbpassword.clone())
.connect(NoTls)?;
let result =
println!("maybe creating database objects");
let mut client = postgres::Config::new()
.dbname(&dbname)
- .host(&host)
- .user(&user)
- .password(password)
+ .host(&dbhost)
+ .user(&dbuser)
+ .password(dbpassword)
.connect(NoTls)?;
client.execute("CREATE EXTENSION IF NOT EXISTS vector", &[])?;
Ok(embeddings)
}
-fn index(dbname: String, host: String, user: String, password: String,
+fn index(dbname: String, dbhost: String, dbuser: String, dbpassword: String,
files: Vec<String>, model: BertModel, tokenizer: Tokenizer) -> Result<()> {
println!("indexing file(s)");
let mut client = postgres::Config::new()
.dbname(&dbname)
- .host(&host)
- .user(&user)
- .password(password)
+ .host(&dbhost)
+ .user(&dbuser)
+ .password(dbpassword)
.connect(NoTls)?;
for file in files {
Ok(())
}
-fn search(dbname: String, host: String, user: String, password: String,
+fn search(dbname: String, dbhost: String, dbuser: String, dbpassword: String,
search: String, model: BertModel, tokenizer: Tokenizer) -> Result<()> {
println!("searching for document matches");
let mut client = postgres::Config::new()
.dbname(&dbname)
- .host(&host)
- .user(&user)
- .password(password)
+ .host(&dbhost)
+ .user(&dbuser)
+ .password(dbpassword)
.connect(NoTls)?;
for row in client.query("SELECT content FROM documents \
let (model, tokenizer) = args.build_model_and_tokenizer()?;
match args.action {
- Action::InitDatabase{ dbname, host, user, password } => {
- init_database(dbname, host, user, password)?;
+ Action::InitDatabase{ dbname, dbhost, dbuser, dbpassword } => {
+ init_database(dbname, dbhost, dbuser, dbpassword)?;
}
- Action::Index{ dbname, host, user, password, file } => {
- index(dbname, host, user, password, file, model, tokenizer)?;
+ Action::Index{ dbname, dbhost, dbuser, dbpassword, file } => {
+ index(dbname, dbhost, dbuser, dbpassword, file, model, tokenizer)?;
}
- Action::Search{ dbname, host, user, password, search: search_term } => {
- search(dbname, host, user, password, search_term, model, tokenizer)?;
+ Action::Search{ dbname, dbhost, dbuser, dbpassword, search: search_term } => {
+ search(dbname, dbhost, dbuser, dbpassword, search_term, model, tokenizer)?;
}
}