.
This commit is contained in:
+14
-19
@@ -1,14 +1,15 @@
|
||||
use crate::{error, SearchDocument};
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use crate::{error, update};
|
||||
use crate::schema::Schema;
|
||||
use std::path::PathBuf;
|
||||
use tantivy::collector::TopDocs;
|
||||
use tantivy::directory::{ManagedDirectory, MmapDirectory};
|
||||
use tantivy::query::{BooleanQuery, Occur, QueryParser, TermQuery};
|
||||
use tantivy::schema::{Field, IndexRecordOption, NamedFieldDocument, Value};
|
||||
use tantivy::schema::{Field, IndexRecordOption};
|
||||
use tantivy::tokenizer::{LowerCaser, NgramTokenizer, TextAnalyzer, TokenizerManager};
|
||||
use tantivy::{Document, Index, IndexReader, IndexWriter, ReloadPolicy, Score, TantivyDocument, Term};
|
||||
use tantivy::indexer::UserOperation;
|
||||
use tracing::{info, instrument, span, Level};
|
||||
use tantivy::{Index, IndexReader, ReloadPolicy, TantivyDocument, Term};
|
||||
use tracing::{span, Level};
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct SearchIndexBuilder {
|
||||
@@ -65,15 +66,9 @@ impl SearchIndex {
|
||||
SearchIndexBuilder::default()
|
||||
}
|
||||
|
||||
pub fn writer(&self) -> crate::Result<IndexWriter> {
|
||||
Ok(self.index.writer(128_000_000)?)
|
||||
}
|
||||
|
||||
pub fn remove_all_of_type(&mut self, type_: u64) -> crate::Result<()> {
|
||||
let mut writer: IndexWriter<TantivyDocument> = self.index.writer(64_000_000)?;
|
||||
writer.delete_term(Term::from_field_u64(Schema::type_field(), type_));
|
||||
writer.commit()?;
|
||||
Ok(())
|
||||
pub fn writer(&self) -> crate::Result<update::IndexWriter> {
|
||||
let inner = self.index.writer(128 * 1024usize.pow(2))?;
|
||||
Ok(crate::IndexWriter { inner })
|
||||
}
|
||||
|
||||
pub fn query(
|
||||
@@ -81,8 +76,9 @@ impl SearchIndex {
|
||||
type_: Option<u64>,
|
||||
user_query: &str,
|
||||
default_fields: Vec<Field>,
|
||||
) -> error::Result<Vec<NamedFieldDocument>> {
|
||||
let span = span!(Level::INFO, "Search Query");
|
||||
limit: usize,
|
||||
) -> error::Result<Vec<TantivyDocument>> {
|
||||
let span = span!(Level::DEBUG, "Search Query");
|
||||
let _enter = span.enter();
|
||||
|
||||
let parser = QueryParser::for_index(&self.index, default_fields);
|
||||
@@ -100,12 +96,11 @@ impl SearchIndex {
|
||||
|
||||
let query = BooleanQuery::new(subqueries);
|
||||
let searcher = self.reader.searcher();
|
||||
let results = searcher.search(&query, &TopDocs::with_limit(10000).order_by_score())?
|
||||
let results: Vec<TantivyDocument> = searcher.search(&query, &TopDocs::with_limit(limit).order_by_score())?
|
||||
.iter()
|
||||
.map(|(_, address)| searcher.doc(*address))
|
||||
.filter_map(Result::ok)
|
||||
.map(|doc: SearchDocument| doc.to_named_doc(Schema::schema()))
|
||||
.collect();
|
||||
Ok(results)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -1,12 +1,13 @@
|
||||
mod error;
|
||||
mod index;
|
||||
mod schema;
|
||||
mod update;
|
||||
|
||||
pub use tantivy::TantivyDocument as SearchDocument;
|
||||
pub use tantivy::doc;
|
||||
pub use tantivy::schema::{NamedFieldDocument, OwnedValue};
|
||||
pub use tantivy::IndexWriter;
|
||||
pub use tantivy::schema::OwnedValue;
|
||||
|
||||
pub use error::{Result, SearchError};
|
||||
pub use index::{SearchIndex, SearchIndexBuilder};
|
||||
pub use schema::Schema;
|
||||
pub use update::IndexWriter;
|
||||
@@ -28,11 +28,7 @@ impl Schema {
|
||||
schema_builder.add_text_field("iri", schema::STORED | schema::STRING);
|
||||
|
||||
schema_builder.add_text_field("label", stored_ngram32.clone());
|
||||
schema_builder.add_text_field("comment", stored_en_stem.clone());
|
||||
|
||||
/*schema_builder.add_text_field("nomen", stored_ngram32.clone());
|
||||
schema_builder.add_text_field("givenName", stored_ngram32.clone());
|
||||
schema_builder.add_text_field("surname", stored_ngram32);*/
|
||||
schema_builder.add_text_field("definition", stored_en_stem.clone());
|
||||
|
||||
/*schema_builder.add_text_field("title", en_stem.clone());
|
||||
schema_builder.add_text_field("description", en_stem.clone());
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
use tantivy::Term;
|
||||
use crate::Schema;
|
||||
|
||||
pub struct IndexWriter {
|
||||
pub(crate) inner: tantivy::IndexWriter,
|
||||
}
|
||||
|
||||
impl IndexWriter {
|
||||
pub fn add(&self, document: crate::SearchDocument) -> crate::Result<()> {
|
||||
let _ = self.inner.add_document(document)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn remove_all_of_type(&mut self, type_: u64) -> crate::Result<()> {
|
||||
self.inner.delete_term(Term::from_field_u64(Schema::type_field(), type_));
|
||||
self.inner.commit()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn commit(&mut self) -> crate::Result<()> {
|
||||
self.inner.commit()?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user