PackageTrack
Sign in Get early access

tantivy

Search engine library

0.26.1 17M downloads/mo #2293 most downloaded on crates.io quickwit-oss/tantivy

What this package is like to depend on

Last release 4 months ago

21 Apr 2026

Release timing varies

gaps range from 2 weeks to 12 months

Some releases are documented

notes for 24 of 41 stable releases

21 versions withdrawn

withdrawn after publishing

10 years old

62 releases · first in 2016

2 releases in the last 12 months

see the full history below

Release timeline

62 releases · Aug 2016 to Apr 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 62
  1. 0.26.1 21 Apr 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: 0.25.0...0.26.1

    Open source →
    Release notes

    Performance

    • Fix quadratic runtime in nested term and composite aggregations: memory accounting scanned all parent buckets on every collect instead of just the current parent (@PSeitz @fulmicoton)
    Open source →
    Release notes

    Bugfixes

    • Fix memory consumption accounting in nested term aggregation to only scan the active parent bucket (@PSeitz)
    • Fix memory consumption accounting in composite aggregation to only scan the active parent bucket (@PSeitz)
    Open source →
  2. 0.26.0 31 Mar 2026

    Nothing published for this version

  3. 0.25.0 20 Aug 2025

    Nothing published for this version

  4. 0.24.2 17 Jul 2025
    Release notes
    • Fix TopNComputer for reverse order. #2672(@stuhood @PSeitz)

    Affected queries are order_by_fast_field and order_by_u64_field for Order::Asc

    Open source →
  5. 0.24.1 22 Apr 2025 withdrawn
    Release notes

    Tantivy 0.24.1

    • fix: Set rust-version to 1.81

    Tantivy 0.24

    Tantivy 0.24 will be backwards compatible with indices created with v0.22 and v0.21. The new minimum rust version will be 1.75. Tantivy 0.23 will be skipped.

    Bugfixes

    Breaking API Changes

    Features/Improvements

    • Aggregation

    • Range Queries

    • add format backwards-compatibility tests #2485(@PSeitz)

    • add columnar format compatibility tests #2433(@PSeitz)

    • Improved snippet ranges algorithm #2474(@gezihuzi)

    • make find_field_with_default return json fields without path #2476(@trinity-1686a)

    • Make BooleanQuery support minimum_number_should_match #2405(@LebranceBW)

    • Make NUM_MERGE_THREADS configurable #2535(@Barre)

    • RegexPhraseQuery
      RegexPhraseQuery supports phrase queries with regex. E.g. query "b.* b.* wolf" matches "big bad wolf". Slop is supported as well: "b.* wolf"~2 matches "big bad wolf" #2516(@PSeitz)

    • Optional Index in Multivalue Columnar Index
      For mostly empty multivalued indices there was a large overhead during creation when iterating all docids (merge case).
      This is alleviated by placing an optional index in the multivalued index to mark documents that have values.
      This will slightly increase space and access time. #2439(@PSeitz)

    • Store DateTime as nanoseconds in doc store DateTime in the doc store was truncated to microseconds previously. This removes this truncation, while still keeping backwards compatibility. #2486(@PSeitz)

    • Performace/Memory

      • lift clauses in LogicalAst for optimized ast during execution #2449(@PSeitz)
      • Use Vec instead of BTreeMap to back OwnedValue object #2364(@fulmicoton)
      • Replace TantivyDocument with CompactDoc. CompactDoc is much smaller and provides similar performance. #2402(@PSeitz)
      • Recycling buffer in PrefixPhraseScorer #2443(@fulmicoton)
    • Json Type

      • JSON supports now all values on the root level. Previously an object was required. This enables support for flat mixed types. allow more JSON values, fix i64 special case #2383(@PSeitz)
      • add json path constructor to term #2367(@PSeitz)
    • QueryParser

    • Exist queries match subpath fields #2558(@rdettai)

    • add access benchmark for columnar #2432(@PSeitz)

    • extend indexwriter proptests #2342(@PSeitz)

    • add bench & test for columnar merging #2428(@PSeitz)

    • Change in Executor API #2391(@fulmicoton)

    • Removed usage of num_cpus #2387(@fulmicoton)

    • use bingang for agg and stacker benchmark #2378#2492(@PSeitz)

    • cleanup top level exports #2382(@PSeitz)

    • make convert_to_fast_value_and_append_to_json_term pub #2370(@PSeitz)

    • remove JsonTermWriter #2238(@PSeitz)

    • validate sort by field type #2336(@PSeitz)

    • Fix trait bound of StoreReader::iter #2360(@adamreichold)

    • remove read_postings_no_deletes #2526(@PSeitz)

    Open source →
    Release notes
    • Fix: bump required rust version to 1.81
    Open source →
  6. 0.24.0 09 Apr 2025 withdrawn

    Nothing published for this version

  7. 0.22.1 17 Jul 2025
    Release notes
    • Fix TopNComputer for reverse order. #2672(@stuhood @PSeitz)

    Affected queries are order_by_fast_field and order_by_u64_field for Order::Asc

    Open source →
  8. 0.22.0 12 Apr 2024 withdrawn

    Nothing published for this version

  9. 0.21.1 26 Oct 2023
    Release notes

    Bugfixes

    • Range queries on fast fields with less values on that field than documents had an invalid end condition, leading to missing results. #2226(@appaquet @PSeitz)
    • Increase the minimum memory budget from 3MB to 15MB to avoid single doc segments (API fix). #2176(@PSeitz)
    Open source →
  10. 0.21.0 01 Sep 2023

    Nothing published for this version

  11. 0.20.2 12 Jun 2023
    Release notes
    • Align numerical type priority order on the search side. #2088 (@fmassot)
    • Fix is_child_of function not considering the root facet. #2086 (@adamreichhold)
    Open source →
  12. 0.20.1 10 Jun 2023
    Release notes
    • Fix building on windows with mmap #2070 (@ChillFish8)
    Open source →
  13. 0.20.0 09 Jun 2023

    Nothing published for this version

  14. 0.19.2 10 Feb 2023

    Nothing published for this version

  15. 0.19.1 13 Jan 2023

    Nothing published for this version

  16. 0.19.0 12 Dec 2022

    Nothing published for this version

  17. 0.18.1 20 Oct 2022
    Release notes
    • Hotfix: positions computation. #1629 (@fmassot, @fulmicoton, @PSeitz)
    Open source →
  18. 0.18.0 25 May 2022 withdrawn

    Nothing published for this version

  19. 0.17.0 09 Mar 2022

    Nothing published for this version

  20. 0.16.1 10 Sep 2021
    Release notes
    • Major Bugfix on multivalued fastfield. #1151
    • Demux operation (@PSeitz)
    Open source →
  21. 0.16.0 26 Aug 2021 withdrawn
    Release notes
    • Bugfix in the filesum check. (@evanxg852000) #1127
    • Bugfix in positions when the index is sorted by a field. (@appaquet) #1125
    Open source →
  22. 0.15.3 30 Jun 2021
    Release notes
    • Major bugfix. Deleting documents was broken when the index was sorted by a field. (@appaquet, @fulmicoton) #1101
    Open source →
  23. 0.15.2 16 Jun 2021 withdrawn
    Release notes
    • Major bugfix. DocStore still panics when a deleted doc is at the beginning of a block. (@appaquet) #1088
    Open source →
  24. 0.15.1 14 Jun 2021 withdrawn
    Release notes
    • Major bugfix. DocStore panics when first block is deleted. (@appaquet) #1077
    Open source →
  25. 0.15.0 07 Jun 2021 withdrawn
    Release notes
    • API Changes. Using Range instead of (start, end) in the API and internals (FileSlice, OwnedBytes, Snippets, ...) This change is breaking but migration is trivial.
    • Added an Histogram collector. (@fulmicoton) #994
    • Added support for Option<TCollector>. (@fulmicoton)
    • DocAddress is now a struct (@scampi) #987
    • Bugfix consistent tie break handling in facet's topk (@hardikpnsp) #357
    • Date field support for range queries (@rihardsk) #516
    • Added lz4-flex as the default compression scheme in tantivy (@PSeitz) #1009
    • Renamed a lot of symbols to avoid all uppercasing on acronyms, as per new clippy recommendation. For instance, RAMDirectory -> RamDirectory. (@fulmicoton)
    • Simplified positions index format (@fulmicoton) #1022
    • Moved bitpacking to bitpacker subcrate and add BlockedBitpacker, which bitpacks blocks of 128 elements (@PSeitz) #1030
    • Added support for more-like-this query in tantivy (@evanxg852000) #1011
    • Added support for sorting an index, e.g presorting documents in an index by a timestamp field. This can heavily improve performance for certain scenarios, by utilizing the sorted data (Top-n optimizations)(@PSeitz). #1026
    • Add iterator over documents in doc store (@PSeitz). #1044
    • Fix log merge policy (@PSeitz). #1043
    • Add detection to avoid small doc store blocks on merge (@PSeitz). #1054
    • Make doc store compression dynamic (@PSeitz). #1060
    • Switch to json for footer version handling (@PSeitz). #1060
    • Updated TermMerger implementation to rely on the union feature of the FST (@scampi) #469
    • Add boolean marking whether position is required in the query_terms API call (@fulmicoton). #1070
    Open source →
  26. 0.14.0 05 Feb 2021
    Release notes
    • Remove dependency to atomicwrites #833 .Implemented by @fulmicoton upon suggestion and research from @asafigan).
    • Migrated tantivy error from the now deprecated failure crate to thiserror #760. (@hirevo)
    • API Change. Accessing the typed value off a Schema::Value now returns an Option instead of panicking if the type does not match.
    • Large API Change in the Directory API. Tantivy used to assume that all files could be somehow memory mapped. After this change, Directory return a FileSlice that can be reduced and eventually read into an OwnedBytes object. Long and blocking io operation are still required by they do not span over the entire file.
    • Added support for Brotli compression in the DocStore. (@ppodolsky)
    • Added helper for building intersections and unions in BooleanQuery (@guilload)
    • Bugfix in Query::explain
    • Removed dependency on notify #924. Replaced with FileWatcher struct that polls meta file every 500ms in background thread. (@halvorboe @guilload)
    • Added FilterCollector, which wraps another collector and filters docs using a predicate over a fast field (@barrotsteindev)
    • Simplified the encoding of the skip reader struct. BlockWAND max tf is now encoded over a single byte. (@fulmicoton)
    • FilterCollector now supports all Fast Field value types (@barrotsteindev)
    • FastField are not all loaded when opening the segment reader. (@fulmicoton)
    • Added an API to merge segments, see tantivy::merge_segments #1005. (@evanxg852000)

    This version breaks compatibility and requires users to reindex everything.

    Open source →
  27. 0.13.3 13 Jan 2021

    Nothing published for this version

  28. 0.13.2 01 Oct 2020
    Release notes

    Bugfix. Acquiring a facet reader on a segment that does not contain any doc with this facet returns None. (#896)

    Open source →
  29. 0.13.1 19 Sep 2020
    Release notes

    Made Query and Collector Send + Sync. Updated misc dependency versions.

    Open source →
  30. 0.13.0 19 Aug 2020
    Release notes

    Tantivy 0.13 introduce a change in the index format that will require you to reindex your index (BlockWAND information are added in the skiplist). The index size increase is minor as this information is only added for full blocks. If you have a massive index for which reindexing is not an option, please contact me so that we can discuss possible solutions.

    • Bugfix in FuzzyTermQuery not matching terms by prefix when it should (@Peachball)
    • Relaxed constraints on the custom/tweak score functions. At the segment level, they can be mut, and they are not required to be Sync + Send.
    • MMapDirectory::open does not return a Result anymore.
    • Change in the DocSet and Scorer API. (@fulmicoton). A freshly created DocSet point directly to their first doc. A sentinel value called TERMINATED marks the end of a DocSet. .advance() returns the new DocId. Scorer::skip(target) has been replaced by Scorer::seek(target) and returns the resulting DocId. As a result, iterating through DocSet now looks as follows
    let mut doc = docset.doc();
    while doc != TERMINATED {
       // ...
       doc = docset.advance();
    }
    

    The change made it possible to greatly simplify a lot of the docset's code.

    • Misc internal optimization and introduction of the Scorer::for_each_pruning function. (@fulmicoton)
    • Added an offset option to the Top(.*)Collectors. (@robyoung)
    • Added Block WAND. Performance on TOP-K on term-unions should be greatly increased. (@fulmicoton, and special thanks to the PISA team for answering all my questions!)
    Open source →
  31. 0.12.0 19 Feb 2020
    Release notes
    • Removing static dispatch in tokenizers for simplicity. (#762)
    • Added backward iteration for TermDictionary stream. (@halvorboe)
    • Fixed a performance issue when searching for the posting lists of a missing term (@audunhalland)
    • Added a configurable maximum number of docs (10M by default) for a segment to be considered for merge (@hntd187, landed by @halvorboe #713)
    • Important Bugfix #777, causing tantivy to retain memory mapping. (diagnosed by @poljar)
    • Added support for field boosting. (#547, @fulmicoton)

    How to update?

    Crates relying on custom tokenizer, or registering tokenizer in the manager will require some minor changes. Check https://github.com/quickwit-oss/tantivy/blob/main/examples/custom_tokenizer.rs to check for some code sample.

    Open source →
  32. 0.11.3 20 Dec 2019
    Release notes
    • Fixed DateTime as a fast field (#735)
    Open source →
  33. 0.11.2 19 Dec 2019
    Release notes
    • The future returned by IndexWriter::merge does not borrow self mutably anymore (#732)
    • Exposing a constructor for WatchHandle (#731)
    Open source →
  34. 0.11.1 17 Dec 2019
    Release notes
    • Bug fix #729
    Open source →
  35. 0.11.0 15 Dec 2019 withdrawn
    Release notes
    • Added f64 field. Internally reuse u64 code the same way i64 does (@fdb-hiroshima)
    • Various bugfixes in the query parser.
      • Better handling of hyphens in query parser. (#609)
      • Better handling of whitespaces.
    • Closes #498 - add support for Elastic-style unbounded range queries for alphanumeric types eg. "title:>hello", "weight:>=70.5", "height:<200" (@petr-tik)
    • API change around Box<BoxableTokenizer>. See detail in #629
    • Avoid rebuilding Regex automaton whenever a regex query is reused. #639 (@brainlock)
    • Add footer with some metadata to index files. #605 (@fdb-hiroshima)
    • Add a method to check the compatibility of the footer in the index with the running version of tantivy (@petr-tik)
    • TopDocs collector: ensure stable sorting on equal score. #671 (@brainlock)
    • Added handling of pre-tokenized text fields (#642), which will enable users to load tokens created outside tantivy. See usage in examples/pre_tokenized_text. (@kkoziara)
    • Fix crash when committing multiple times with deleted documents. #681 (@brainlock)

    How to update?

    • The index format is changed. You are required to reindex your data to use tantivy 0.11.
    • Box<dyn BoxableTokenizer> has been replaced by a BoxedTokenizer struct.
    • Regex are now compiled when the RegexQuery instance is built. As a result, it can now return an error and handling the Result is required.
    • tantivy::version() now returns a Version object. This object implements ToString()
    Open source →
  36. 0.10.3 10 Nov 2019

    Nothing published for this version

  37. 0.10.2 01 Oct 2019 withdrawn
    Release notes
    • Closes #656. Solving memory leak.
    Open source →
  38. 0.10.1 30 Jul 2019 withdrawn
    Release notes
    • Closes #544. A few users experienced problems with the directory watching system. Avoid watching the mmap directory until someone effectively creates a reader that uses this functionality.
    Open source →
  39. 0.10.0 11 Jul 2019 withdrawn
    Release notes

    Tantivy 0.10.0 index format is compatible with the index format in 0.9.0.

    • Added an API to easily tweak or entirely replace the default score. See TopDocs::tweak_scoreand TopScore::custom_score (@fulmicoton)
    • Added an ASCII folding filter (@drusellers)
    • Bugfix in query.count in presence of deletes (@fulmicoton)
    • Added .explain(...) in Query and Weight to (@fulmicoton)
    • Added an efficient way to delete_all_documents in IndexWriter (@petr-tik). All segments are simply removed.

    Minor

    • Switched to Rust 2018 (@uvd)
    • Small simplification of the code. Calling .freq() or .doc() when .advance() has never been called on segment postings should panic from now on.
    • Tokens exceeding u16::max_value() - 4 chars are discarded silently instead of panicking.
    • Fast fields are now preloaded when the SegmentReader is created.
    • IndexMeta is now public. (@hntd187)
    • IndexWriter add_document, delete_term. IndexWriter is Sync, making it possible to use it with a Arc<RwLock<IndexWriter>>. add_document and delete_term can only require a read lock. (@fulmicoton)
    • Introducing Opstamp as an expressive type alias for u64. (@petr-tik)
    • Stamper now relies on AtomicU64 on all platforms (@petr-tik)
    • Bugfix - Files get deleted slightly earlier
    • Compilation resources improved (@fdb-hiroshima)

    How to update?

    Your program should be usable as is.

    Fast fields

    Fast fields used to be accessed directly from the SegmentReader. The API changed, you are now required to acquire your fast field reader via the segment_reader.fast_fields(), and use one of the typed method:

    • .u64(), .i64() if your field is single-valued ;
    • .u64s(), .i64s() if your field is multi-valued ;
    • .bytes() if your field is bytes fast field.
    Open source →
  40. 0.9.1 28 Mar 2019

    Nothing published for this version

  41. 0.9.0 20 Mar 2019
    Release notes

    0.9.0 index format is not compatible with the previous index format.

    • MAJOR BUGFIX : Some Mmap objects were being leaked, and would never get released. (@fulmicoton)
    • Removed most unsafe (@fulmicoton)
    • Indexer memory footprint improved. (VInt comp, inlining the first block. (@fulmicoton)
    • Stemming in other language possible (@pentlander)
    • Segments with no docs are deleted earlier (@barrotsteindev)
    • Added grouped add and delete operations. They are guaranteed to happen together (i.e. they cannot be split by a commit). In addition, adds are guaranteed to happen on the same segment. (@elbow-jason)
    • Removed INT_STORED and INT_INDEXED. It is now possible to use STORED and INDEXED for int fields. (@fulmicoton)
    • Added DateTime field (@barrotsteindev)
    • Added IndexReader. By default, index is reloaded automatically upon new commits (@fulmicoton)
    • SIMD linear search within blocks (@fulmicoton)

    How to update ?

    tantivy 0.9 brought some API breaking change. To update from tantivy 0.8, you will need to go through the following steps.

    • schema::INT_INDEXED and schema::INT_STORED should be replaced by schema::INDEXED and schema::INT_STORED.

    • The index now does not hold the pool of searcher anymore. You are required to create an intermediary object called IndexReader for this.

      // create the reader. You typically need to create 1 reader for the entire
      // lifetime of you program.
      let reader = index.reader()?;
      
      // Acquire a searcher (previously `index.searcher()`) is now written:
      let searcher = reader.searcher();
      
      // With the default setting of the reader, you are not required to
      // call `index.load_searchers()` anymore.
      //
      // The IndexReader will pick up that change automatically, regardless
      // of whether the update was done in a different process or not.
      // If this behavior is not wanted, you can create your reader with
      // the `ReloadPolicy::Manual`, and manually decide when to reload the index
      // by calling `reader.reload()?`.
      
      
    Open source →
  42. 0.8.2 14 Feb 2019
    Release notes

    Fixing build for x86_64 platforms. (#496) No need to update from 0.8.1 if tantivy is building on your platform.

    Open source →
  43. 0.8.1 23 Jan 2019
    Release notes

    Hotfix of #476.

    Merge was reflecting deletes before commit was passed. Thanks @barrotsteindev for reporting the bug.

    Open source →
  44. 0.8.0 26 Dec 2018 withdrawn
    Release notes

    No change in the index format

    • API Breaking change in the collector API. (@jwolfe, @fulmicoton)
    • Multithreaded search (@jwolfe, @fulmicoton)
    Open source →
  45. 0.7.2 18 Dec 2018

    Nothing published for this version

  46. 0.7.1 02 Nov 2018 withdrawn
    Release notes

    No change in the index format

    • Bugfix: NGramTokenizer panics on non ascii chars
    • Added a space usage API
    Open source →
  47. 0.7.0 16 Sep 2018 withdrawn

    Nothing published for this version

  48. 0.6.1 10 Jul 2018
    Release notes
    • Bugfix #324. GC removing was removing file that were still in useful
    • Added support for parsing AllQuery and RangeQuery via QueryParser
      • AllQuery: *
      • RangeQuery:
        • Inclusive field:[startIncl to endIncl]
        • Exclusive field:{startExcl to endExcl}
        • Mixed field:[startIncl to endExcl} and vice versa
        • Unbounded field:[start to *], field:[* to end]
    Open source →
  49. 0.6.0 22 Jun 2018 withdrawn

    Nothing published for this version

  50. 0.5.2 06 May 2018
    Release notes
    • bugfix #274
    • bugfix #280
    • bugfix #289
    Open source →
  51. 0.5.1 10 Mar 2018 withdrawn
    Release notes
    • bugfix #254 : tantivy failed if no documents in a segment contained a specific field.
    Open source →
  52. 0.5.0 21 Feb 2018 withdrawn

    Nothing published for this version

  53. 0.4.4 10 Jan 2018

    Nothing published for this version

  54. 0.4.3 24 Jul 2017
    Release notes
    • Bugfix race condition when deleting files. (#198)
    Open source →
  55. 0.4.2 19 Jul 2017 withdrawn
    Release notes
    • Prevent usage of AVX2 instructions (#201)
    Open source →
  56. 0.4.1 19 Jul 2017 withdrawn
    Release notes
    • Bugfix for non-indexed fields. (#199)
    Open source →
  57. 0.4.0 14 Jul 2017 withdrawn
    Release notes
    • Raise the limit of number of fields (previously 256 fields) (@fulmicoton)
    • Removed u32 fields. They are replaced by u64 and i64 fields (#65) (@fulmicoton)
    • Optimized skip in SegmentPostings (#130) (@lnicola)
    • Replacing rustc_serialize by serde. Kudos to benchmark@KodrAus and @lnicola
    • Using error-chain (@KodrAus)
    • QueryParser: (@fulmicoton)
      • Explicit error returned when searched for a term that is not indexed
      • Searching for a int term via the query parser was broken (age:1)
      • Searching for a non-indexed field returns an explicit Error
      • Phrase query for non-tokenized field are not tokenized by the query parser.
    • Faster/Better indexing (@fulmicoton)
      • using murmurhash2
      • faster merging
      • more memory efficient fast field writer (@lnicola )
      • better handling of collisions
      • lesser memory usage
    • Added API, most notably to iterate over ranges of terms (@fulmicoton)
    • Bugfix that was preventing to unmap segment files, on index drop (@fulmicoton)
    • Made the doc! macro public (@fulmicoton)
    • Added an alternative implementation of the streaming dictionary (@fulmicoton)
    Open source →
  58. 0.3.1 23 Apr 2017
    Release notes
    • Expose a method to trigger files garbage collection
    Open source →
  59. 0.3.0 08 Apr 2017

    Nothing published for this version

  60. 0.2.0 11 Dec 2016

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive