.
This commit is contained in:
+6
-30
@@ -7,7 +7,7 @@ use tantivy::directory::{ManagedDirectory, MmapDirectory};
|
||||
use tantivy::query::{BooleanQuery, Occur, QueryParser, TermQuery};
|
||||
use tantivy::schema::{Field, IndexRecordOption, Value};
|
||||
use tantivy::tokenizer::{NgramTokenizer, TokenizerManager};
|
||||
use tantivy::{Index, IndexReader, IndexWriter, ReloadPolicy, TantivyDocument, Term, doc};
|
||||
use tantivy::{Index, IndexReader, IndexWriter, ReloadPolicy, TantivyDocument, Term};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct SearchIndexBuilder {
|
||||
@@ -62,40 +62,16 @@ impl SearchIndex {
|
||||
SearchIndexBuilder::default()
|
||||
}
|
||||
|
||||
pub fn remove_all_annotated_iris(&mut self) {
|
||||
self.writer
|
||||
.delete_term(Term::from_field_u64(Schema::type_field(), 0u64));
|
||||
self.writer.commit().unwrap();
|
||||
}
|
||||
|
||||
pub fn add_annotated_iri(
|
||||
&self,
|
||||
iri: &str,
|
||||
label: Option<&str>,
|
||||
comment: Option<&str>,
|
||||
) -> crate::Result<()> {
|
||||
let mut document = doc!(
|
||||
Schema::type_field() => 0u64,
|
||||
Schema::iri_field() => iri,
|
||||
);
|
||||
|
||||
if let Some(label) = label {
|
||||
document.add_text(Schema::label_field(), label.to_lowercase());
|
||||
}
|
||||
|
||||
if let Some(comment) = comment {
|
||||
document.add_text(Schema::comment_field(), comment);
|
||||
}
|
||||
|
||||
self.writer.add_document(document)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn add<'a>(&self, document: TantivyDocument) -> crate::Result<()> {
|
||||
self.writer.add_document(document)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn remove_all_of_type(&mut self, type_: u64) {
|
||||
self.writer
|
||||
.delete_term(Term::from_field_u64(Schema::type_field(), type_));
|
||||
}
|
||||
|
||||
pub fn commit(&mut self) -> crate::Result<()> {
|
||||
self.writer.commit()?;
|
||||
Ok(())
|
||||
|
||||
@@ -3,6 +3,7 @@ mod index;
|
||||
mod schema;
|
||||
|
||||
pub use tantivy::TantivyDocument as SearchDocument;
|
||||
pub use tantivy::doc;
|
||||
|
||||
pub use error::{Result, SearchError};
|
||||
pub use index::{SearchIndex, SearchIndexBuilder};
|
||||
|
||||
+8
-18
@@ -53,25 +53,15 @@ impl Schema {
|
||||
Self::schema().get_field("iri").unwrap()
|
||||
}
|
||||
|
||||
pub fn label_field() -> Field {
|
||||
Self::schema().get_field("label").unwrap()
|
||||
pub fn field(name: &str) -> Field {
|
||||
Schema::schema()
|
||||
.get_field(name)
|
||||
.expect("Field not found in schema")
|
||||
}
|
||||
|
||||
pub fn comment_field() -> Field {
|
||||
Self::schema().get_field("comment").unwrap()
|
||||
}
|
||||
|
||||
pub fn ontology_fields() -> Vec<Field> {
|
||||
vec![Self::label_field(), Self::comment_field()]
|
||||
}
|
||||
|
||||
pub fn default_fields() -> Vec<Field> {
|
||||
vec![
|
||||
Self::schema().get_field("given name").unwrap(),
|
||||
Self::schema().get_field("surname").unwrap(),
|
||||
Self::schema().get_field("title").unwrap(),
|
||||
Self::schema().get_field("description").unwrap(),
|
||||
Self::schema().get_field("content").unwrap(),
|
||||
]
|
||||
pub fn all_fields() -> Vec<Field> {
|
||||
Self::schema().fields()
|
||||
.map(|(field, _)| field)
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user