Skip to content

🚀 Version 0.6.0

Compare
Choose a tag to compare
@ChillFish8 ChillFish8 released this 12 Oct 20:46
· 98 commits to master since this release
aaa70f6

Version 0.6.0

0.6 is the biggest update we've released since the initial launch of 0.1, this brings with it a complete redesign of the engine, fast fuzzy system and server design.
This has vastly improved the performance and most importantly maintainability of the codebase before 0.6 was starting to show issues of too many things doing the same thing in different .laces.
We also took the opportunity during the redesign to cut out several dependencies and requirements e.g. sqlx with sqlite3 and axum which while they worked fine, added a lot of dependencies for a setup we didn't need them for, hence why they were dropped and moved to more lightweight or existing solutions (axum was moved to just hyper + routerify and sqlx was replaced with tantivy's inbuilt storage system).

What's New?

The new engine brings many many breaking changes, but we believe they're worth it!

  • Facet fields - hierarchical facets are now supported and can be added by the facet field type and access like a file path e.g. /tools/hammers via a Term query.
  • Term queries - These work similar to the Normal mode except that they are not fed through the parser so query values will be treated as literal strings. This is especially useful for the new facet fields.
  • Combination queries - You can now construct any combination of query kinds and adjust if they should, must or must not appear in matched documents etc... This allows you to truly create any range of queries you need. I cannot stress enough how awesome this feature is after playing around with it in testing.
  • Forgiving values - Lnx will now attempt to convert values into their required type if possible before rejecting a request so things like "3" become 3 for integer fields and DateTime can be converted from a UTC timestamp or formatted string.
  • Single or Multi-value inputs - Lnx now supports the ability to apply operations with a single or multiple values, this includes things like delete queries which now take all fields into consideration (although these are treated as an OR not an AND)
  • Reversible results - You can now order your results in ascending to descending order.
  • Togglable search request logging - We understand that not everyone wants to completely disable info logging just to stop logging every search request so we've made it an optional flag to pass (--silent-search)

What's Changed?

It's not just new things being added! We've overhauled the existing designs as well!

  • Queries moved from GET -> POST - Queries are now done via POST requests as to allow for the new combination query system.
  • Deletes now support multi-field and multi-value options - You can now delete by several fields and values at once rather than doing many individual requests.
  • Bulk insertion optimisations - Bulk documents are no longer handled one by one internally in channels which allows for mild performance improvements for large payloads.
  • Unit tests - Yes that's right, we actually have some now! And more on the way. This should hopefully help get us closer to release and make sure everything is running smoother.
  • Smaller binary size - Docker images and the like now come in at almost 3x smaller sizes (Only 3.4MB!)
  • Changeable stop words - You now change what stop words are used on a per-index basis, otherwise a sensible multi-language set of defaults are used.
  • Fast fuzzy no longer uses pre-set dicts - This is a major change for our fast fuzzy system, using the document frequencies instead of pre-setting defaults has reduced memory usage from a constant 1.3 - 2GB of memory to a couple of hundred MB on large indexes. (NOTE: This will increase the more documents are added with unique words, so it is a good idea to every so often to reload the index and re-upload docs, this will lower resource usage and also improve relevancy)
  • More in-depth permissions - Permissions have been moved to bit fields which allow for some more fine-grain control of access.

What's Gone?

Alas, not everything has stayed the same, with some of the framework changes some things were removed.

  • TLS support, ultimately it was decided that Lnx should be behind a reverse proxy anyway / internally used so TLS doe not serve many purposes.

What's Changed

Full Changelog: 0.5.0...0.6.0