diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | Cargo.toml | 7 | ||||
-rw-r--r-- | README.md | 7 | ||||
-rw-r--r-- | src/collector/facet_collector.rs | 34 | ||||
-rw-r--r-- | src/core/segment_component.rs | 4 | ||||
-rw-r--r-- | src/indexer/index_writer.rs | 5 | ||||
-rw-r--r-- | src/indexer/segment_updater.rs | 5 | ||||
-rw-r--r-- | src/query/range_query.rs | 2 |
8 files changed, 40 insertions, 25 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index c3802d5..3b946a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Tantivy 0.5.2 - Removed C code. Tantivy is now pure Rust. - BM25 - Approximate field norms encoded over 1 byte. +- Compiles on stable rust Tantivy 0.5.1 ========================== @@ -40,10 +40,7 @@ stable_deref_trait = "1.0.0" rust-stemmers = "0.1.0" downcast = { version="0.9" } matches = "0.1" -bitpacking = "0.3.1" - -[target.'cfg(windows)'.dependencies] -winapi = "0.2" +bitpacking = {path="../bitpacking"} [dev-dependencies] rand = "0.3" @@ -57,10 +54,10 @@ debug-assertions = false [features] default = ["mmap"] +simd = ["bitpacking/simd"] streamdict = [] mmap = ["fst/mmap", "atomicwrites"] - [badges] travis-ci = { repository = "tantivy-search/tantivy" } @@ -43,15 +43,12 @@ It will walk you through getting a wikipedia search engine up and running in a f ## Development -Tantivy requires Rust Nightly because it uses requires the features [`box_syntax`](https://doc.rust-lang.org/stable/unstable-book/language-features/box-syntax.html), [`optin_builtin_traits`](https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md), [`conservative_impl_trait`](https://github.com/rust-lang/rfcs/blob/master/text/1522-conservative-impl-trait.md), -and [simd](https://github.com/rust-lang/rust/issues/27731). - - +Tantivy now compiles on stable rust. To check out and run test, you can simply run : git clone git@github.com:tantivy-search/tantivy.git cd tantivy - cargo +nightly build + cargo build ## Note on release build and performance diff --git a/src/collector/facet_collector.rs b/src/collector/facet_collector.rs index f94d343..bc0c46c 100644 --- a/src/collector/facet_collector.rs +++ b/src/collector/facet_collector.rs @@ -432,11 +432,29 @@ pub struct FacetCounts { facet_counts: BTreeMap<Facet, u64>, } + +use std::collections::btree_map; + +struct FacetChildIterator<'a> { + underlying: btree_map::Range<'a, Facet, u64>, +} + +impl<'a> Iterator for FacetChildIterator<'a> { + + type Item = (&'a Facet, u64); + + fn next(&mut self) -> Option<Self::Item> { + self.underlying + .next() + .map(|(facet, count)| (facet, *count)) + } +} + + impl FacetCounts { - #[allow(needless_lifetimes)] //< compiler fails if we remove the lifetime - pub fn get<'a, T>(&'a self, facet_from: T) -> impl Iterator<Item = (&'a Facet, u64)> - where - Facet: From<T>, + + pub fn get<T>(&self, facet_from: T) -> FacetChildIterator //impl Iterator<Item = (&'a Facet, u64)> + where Facet: From<T> { let facet = Facet::from(facet_from); let left_bound = Bound::Excluded(facet.clone()); @@ -448,10 +466,10 @@ impl FacetCounts { let facet_after = Facet::from_encoded(facet_after_bytes); Bound::Excluded(facet_after) }; - - self.facet_counts - .range((left_bound, right_bound)) - .map(|(facet, count)| (facet, *count)) + let underlying: btree_map::Range<_, _> = self.facet_counts.range((left_bound, right_bound)); + FacetChildIterator { + underlying + } } pub fn top_k<T>(&self, facet: T, k: usize) -> Vec<(&Facet, u64)> diff --git a/src/core/segment_component.rs b/src/core/segment_component.rs index 58c25a0..d02a83b 100644 --- a/src/core/segment_component.rs +++ b/src/core/segment_component.rs @@ -1,3 +1,5 @@ +use std::slice; + /// Enum describing each component of a tantivy segment. /// Each component is stored in its own file, /// using the pattern `segment_uuid`.`component_extension`, @@ -26,7 +28,7 @@ pub enum SegmentComponent { impl SegmentComponent { /// Iterates through the components. - pub fn iterator() -> impl Iterator<Item = &'static SegmentComponent> { + pub fn iterator() -> slice::Iter<'static, SegmentComponent> { static SEGMENT_COMPONENTS: [SegmentComponent; 7] = [ SegmentComponent::POSTINGS, SegmentComponent::POSITIONS, diff --git a/src/indexer/index_writer.rs b/src/indexer/index_writer.rs index e882fac..75225fc 100644 --- a/src/indexer/index_writer.rs +++ b/src/indexer/index_writer.rs @@ -7,14 +7,13 @@ use core::SegmentId; use core::SegmentMeta; use core::SegmentReader; use indexer::stamper::Stamper; +use futures::sync::oneshot::Receiver; use datastruct::stacker::Heap; use directory::FileProtection; use error::{Error, ErrorKind, Result, ResultExt}; use fastfield::write_delete_bitset; use indexer::delete_queue::{DeleteCursor, DeleteQueue}; -use futures::Canceled; use datastruct::stacker::hashmap::split_memory; -use futures::Future; use indexer::doc_opstamp_mapping::DocToOpstampMapping; use indexer::MergePolicy; use indexer::operation::DeleteOperation; @@ -447,7 +446,7 @@ impl IndexWriter { pub fn merge( &mut self, segment_ids: &[SegmentId], - ) -> impl Future<Item = SegmentMeta, Error = Canceled> { + ) -> Receiver<SegmentMeta> { self.segment_updater.start_merge(segment_ids) } diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 6853c42..83c68c9 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -10,8 +10,8 @@ use indexer::stamper::Stamper; use error::{Error, ErrorKind, Result}; use futures_cpupool::CpuPool; use futures::Future; -use futures::Canceled; use futures::oneshot; +use futures::sync::oneshot::Receiver; use directory::FileProtection; use indexer::{DefaultMergePolicy, MergePolicy}; use indexer::index_writer::advance_deletes; @@ -286,7 +286,7 @@ impl SegmentUpdater { pub fn start_merge( &self, segment_ids: &[SegmentId], - ) -> impl Future<Item = SegmentMeta, Error = Canceled> { + ) -> Receiver<SegmentMeta> { self.0.segment_manager.start_merge(segment_ids); let segment_updater_clone = self.clone(); @@ -361,6 +361,7 @@ impl SegmentUpdater { let committed_merge_candidates = merge_policy.compute_merge_candidates(&committed_segments); merge_candidates.extend_from_slice(&committed_merge_candidates[..]); for MergeCandidate(segment_metas) in merge_candidates { + // TODO what do we do with the future here self.start_merge(&segment_metas); } } diff --git a/src/query/range_query.rs b/src/query/range_query.rs index ab7cf88..9c85449 100644 --- a/src/query/range_query.rs +++ b/src/query/range_query.rs @@ -64,7 +64,7 @@ fn map_bound<TFrom, Transform: Fn(TFrom) -> Vec<u8>>( /// let searcher = index.searcher(); /// /// let docs_in_the_sixties = RangeQuery::new_u64(year_field, 1960..1970); -/// +/// /// let mut count_collector = CountCollector::default(); /// docs_in_the_sixties.search(&*searcher, &mut count_collector)?; /// |