Auto-update fts index
This commit is contained in:
@@ -27,8 +27,8 @@ pub struct DbFtsIndex {
|
||||
|
||||
impl DbFtsIndex {
|
||||
fn fts_cfg(&self) -> &DatasetFts {
|
||||
static DEFAULT: LazyLock<DatasetFts> = LazyLock::new(|| DatasetFts::default());
|
||||
&self.cfg.fts.as_ref().unwrap_or(&DEFAULT)
|
||||
static DEFAULT: LazyLock<DatasetFts> = LazyLock::new(DatasetFts::default);
|
||||
self.cfg.fts.as_ref().unwrap_or(&DEFAULT)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,9 +47,9 @@ impl DbFtsIndex {
|
||||
let fields = &cfg.fts.as_ref().unwrap_or(&default).fields;
|
||||
for (name, field) in fields {
|
||||
if field.tokenize {
|
||||
schema_builder.add_text_field(&name, schema::TEXT);
|
||||
schema_builder.add_text_field(name, schema::TEXT);
|
||||
} else {
|
||||
schema_builder.add_text_field(&name, schema::STRING);
|
||||
schema_builder.add_text_field(name, schema::STRING);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,19 +70,23 @@ impl DbFtsIndex {
|
||||
) -> Result<Option<TantivyDocument>, TantivyError> {
|
||||
let mut doc = TantivyDocument::default();
|
||||
|
||||
{
|
||||
let f_ptr = self.schema.get_field("_meta_source")?;
|
||||
doc.add_text(f_ptr, item.source_name());
|
||||
}
|
||||
let key = match item.key().to_string() {
|
||||
Some(x) => x,
|
||||
None => {
|
||||
warn!(
|
||||
message = "Item key cannot be converted to a string, skipping",
|
||||
key = ?item.key(),
|
||||
);
|
||||
return Ok(None);
|
||||
}
|
||||
};
|
||||
|
||||
{
|
||||
let f_ptr = self.schema.get_field("_meta_key")?;
|
||||
doc.add_text(f_ptr, item.key().to_string());
|
||||
}
|
||||
doc.add_text(self.schema.get_field("_meta_source")?, item.source_name());
|
||||
doc.add_text(self.schema.get_field("_meta_key")?, key);
|
||||
|
||||
let json = item.json().unwrap();
|
||||
let json = item.json()?;
|
||||
let mut empty = true;
|
||||
for (name, _field) in &self.fts_cfg().fields {
|
||||
for name in self.fts_cfg().fields.keys() {
|
||||
let val = match self.get_field(&json, name)? {
|
||||
Some(x) => x,
|
||||
None => continue,
|
||||
@@ -118,7 +122,7 @@ impl DbFtsIndex {
|
||||
|
||||
// Try paths in order, using the first value we find
|
||||
'outer: for path in field.path.as_slice() {
|
||||
let val = match json.query(&path) {
|
||||
let val = match json.query(path) {
|
||||
Ok(mut x) => {
|
||||
if x.len() > 1 {
|
||||
warn!(
|
||||
@@ -168,6 +172,7 @@ impl DbFtsIndex {
|
||||
|
||||
loop {
|
||||
val = match val {
|
||||
#[expect(clippy::unwrap_used)]
|
||||
Value::Array(ref mut x) => {
|
||||
if x.len() == 1 {
|
||||
x.pop().unwrap()
|
||||
|
||||
Reference in New Issue
Block a user