mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-04 16:22:55 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7720d21265 |
@@ -1,3 +1,8 @@
|
|||||||
|
Tantivy 0.13.2
|
||||||
|
===================
|
||||||
|
Bugfix. Acquiring a facet reader on a segment that does not contain any
|
||||||
|
doc with this facet returns `None`. (#896)
|
||||||
|
|
||||||
Tantivy 0.13.1
|
Tantivy 0.13.1
|
||||||
======================
|
======================
|
||||||
Made `Query` and `Collector` `Send + Sync`.
|
Made `Query` and `Collector` `Send + Sync`.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "tantivy"
|
name = "tantivy"
|
||||||
version = "0.13.1"
|
version = "0.13.2"
|
||||||
authors = ["Paul Masurel <paul.masurel@gmail.com>"]
|
authors = ["Paul Masurel <paul.masurel@gmail.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
categories = ["database-implementations", "data-structures"]
|
categories = ["database-implementations", "data-structures"]
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ fn main() -> tantivy::Result<()> {
|
|||||||
);
|
);
|
||||||
let top_docs_by_custom_score =
|
let top_docs_by_custom_score =
|
||||||
TopDocs::with_limit(2).tweak_score(move |segment_reader: &SegmentReader| {
|
TopDocs::with_limit(2).tweak_score(move |segment_reader: &SegmentReader| {
|
||||||
let mut ingredient_reader = segment_reader.facet_reader(ingredient).unwrap();
|
let ingredient_reader = segment_reader.facet_reader(ingredient).unwrap();
|
||||||
let facet_dict = ingredient_reader.facet_dict();
|
let facet_dict = ingredient_reader.facet_dict();
|
||||||
|
|
||||||
let query_ords: HashSet<u64> = facets
|
let query_ords: HashSet<u64> = facets
|
||||||
|
|||||||
@@ -112,8 +112,10 @@ impl SegmentReader {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let term_ords_reader = self.fast_fields().u64s(field)?;
|
let term_ords_reader = self.fast_fields().u64s(field)?;
|
||||||
let termdict_source = self.termdict_composite.open_read(field)?;
|
let termdict = self.termdict_composite
|
||||||
let termdict = TermDictionary::from_source(&termdict_source);
|
.open_read(field)
|
||||||
|
.map(|source| TermDictionary::from_source(&source))
|
||||||
|
.unwrap_or_else(TermDictionary::empty);
|
||||||
let facet_reader = FacetReader::new(term_ords_reader, termdict);
|
let facet_reader = FacetReader::new(term_ords_reader, termdict);
|
||||||
Some(facet_reader)
|
Some(facet_reader)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,52 @@ impl FacetReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Return the list of facet ordinals associated to a document.
|
/// Return the list of facet ordinals associated to a document.
|
||||||
pub fn facet_ords(&mut self, doc: DocId, output: &mut Vec<u64>) {
|
pub fn facet_ords(&self, doc: DocId, output: &mut Vec<u64>) {
|
||||||
self.term_ords.get_vals(doc, output);
|
self.term_ords.get_vals(doc, output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::{Document, schema::{Facet, SchemaBuilder}};
|
||||||
|
use crate::Index;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_facet_not_populated_for_all_docs() -> crate::Result<()> {
|
||||||
|
let mut schema_builder = SchemaBuilder::default();
|
||||||
|
let facet_field = schema_builder.add_facet_field("facet");
|
||||||
|
let schema = schema_builder.build();
|
||||||
|
let index = Index::create_in_ram(schema);
|
||||||
|
let mut index_writer = index.writer_with_num_threads(1, 10_000_000)?;
|
||||||
|
index_writer.add_document(doc!(facet_field=>Facet::from_text("/a/b")));
|
||||||
|
index_writer.add_document(Document::default());
|
||||||
|
index_writer.commit()?;
|
||||||
|
let searcher = index.reader()?.searcher();
|
||||||
|
let facet_reader = searcher.segment_reader(0u32).facet_reader(facet_field).unwrap();
|
||||||
|
let mut facet_ords = Vec::new();
|
||||||
|
facet_reader.facet_ords(0u32, &mut facet_ords);
|
||||||
|
assert_eq!(&facet_ords, &[2u64]);
|
||||||
|
facet_reader.facet_ords(1u32, &mut facet_ords);
|
||||||
|
assert!(facet_ords.is_empty());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
#[test]
|
||||||
|
fn test_facet_not_populated_for_any_docs() -> crate::Result<()> {
|
||||||
|
let mut schema_builder = SchemaBuilder::default();
|
||||||
|
let facet_field = schema_builder.add_facet_field("facet");
|
||||||
|
let schema = schema_builder.build();
|
||||||
|
let index = Index::create_in_ram(schema);
|
||||||
|
let mut index_writer = index.writer_with_num_threads(1, 10_000_000)?;
|
||||||
|
index_writer.add_document(Document::default());
|
||||||
|
index_writer.add_document(Document::default());
|
||||||
|
index_writer.commit()?;
|
||||||
|
let searcher = index.reader()?.searcher();
|
||||||
|
let facet_reader = searcher.segment_reader(0u32).facet_reader(facet_field).unwrap();
|
||||||
|
let mut facet_ords = Vec::new();
|
||||||
|
facet_reader.facet_ords(0u32, &mut facet_ords);
|
||||||
|
assert!(facet_ords.is_empty());
|
||||||
|
facet_reader.facet_ords(1u32, &mut facet_ords);
|
||||||
|
assert!(facet_ords.is_empty());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -126,6 +126,7 @@ impl FastFieldsWriter {
|
|||||||
for field_writer in &self.single_value_writers {
|
for field_writer in &self.single_value_writers {
|
||||||
field_writer.serialize(serializer)?;
|
field_writer.serialize(serializer)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
for field_writer in &self.multi_values_writers {
|
for field_writer in &self.multi_values_writers {
|
||||||
let field = field_writer.field();
|
let field = field_writer.field();
|
||||||
field_writer.serialize(serializer, mapping.get(&field))?;
|
field_writer.serialize(serializer, mapping.get(&field))?;
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ impl SegmentWriter {
|
|||||||
if let Some(unordered_term_id) = unordered_term_id_opt {
|
if let Some(unordered_term_id) = unordered_term_id_opt {
|
||||||
self.fast_field_writers
|
self.fast_field_writers
|
||||||
.get_multivalue_writer(field)
|
.get_multivalue_writer(field)
|
||||||
.expect("multified writer for facet missing")
|
.expect("writer for facet missing")
|
||||||
.add_val(unordered_term_id);
|
.add_val(unordered_term_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user